//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS SecurityHub service.
///
/// Security Hub provides you with a comprehensive view of your security state in Amazon Web Services and helps  you assess your Amazon Web Services environment against security industry standards and best practices. Security Hub collects security data across Amazon Web Services accounts, Amazon Web Services services, and  supported third-party products and helps you analyze your security trends and identify the highest priority security  issues. To help you manage the security state of your organization, Security Hub supports multiple security standards.  These include the Amazon Web Services Foundational Security Best Practices (FSBP) standard developed by Amazon Web Services,  and external compliance frameworks such as the Center for Internet Security (CIS), the Payment Card Industry Data  Security Standard (PCI DSS), and the National Institute of Standards and Technology (NIST). Each standard includes  several security controls, each of which represents a security best practice. Security Hub runs checks against  security controls and generates control findings to help you assess your compliance against security best practices. In addition to generating control findings, Security Hub also receives findings from other Amazon Web Services services,  such as Amazon GuardDuty and Amazon Inspector, and  supported third-party products. This gives you a single pane of glass into a variety of security-related issues. You  can also send Security Hub findings to other Amazon Web Services services and supported third-party products. Security Hub offers automation features that help you triage and remediate security issues. For example,  you can use automation rules to automatically update critical findings when a security check fails. You can also leverage the integration with  Amazon EventBridge  to trigger automatic responses to specific findings. This guide, the Security Hub API Reference, provides information about the Security Hub API. This includes supported resources, HTTP methods, parameters, and schemas. If you're new to Security Hub, you might find it helpful to also review the  Security Hub User Guide . The user guide explains key concepts and provides procedures that demonstrate how to use Security Hub features. It also provides information about topics such as integrating Security Hub with other Amazon Web Services services. In addition to interacting with Security Hub  by making calls to the Security Hub API, you can use a current version of an Amazon Web Services command line tool or SDK. Amazon Web Services provides tools  and SDKs that consist of libraries and sample code for various languages and platforms, such as PowerShell, Java, Go, Python, C++, and .NET. These tools and SDKs provide convenient, programmatic access to Security Hub  and other Amazon Web Services services . They also handle tasks such as signing requests,  managing errors, and retrying requests automatically. For information about installing and using the Amazon Web Services  tools and SDKs, see Tools to Build on Amazon Web Services. With the exception of operations that are related to central configuration, Security Hub API requests are executed only in the Amazon Web Services Region that is currently active or in the specific Amazon Web Services Region that you specify in your request. Any configuration or settings change that results from the operation is applied only to that Region. To make the same change in other Regions, call the same API operation in each Region in which you want to apply the change. When you use central configuration,
/// API requests for enabling Security Hub, standards, and controls are executed in the home Region and all linked Regions. For a list of
/// central configuration operations, see the Central configuration
/// terms and concepts section of the Security Hub User Guide. The following throttling limits apply to Security Hub API operations.    BatchEnableStandards - RateLimit of 1 request per second. BurstLimit of 1 request per second.    GetFindings - RateLimit of 3 requests per second. BurstLimit of 6 requests per second.    BatchImportFindings - RateLimit of 10 requests per second. BurstLimit of 30 requests per second.    BatchUpdateFindings - RateLimit of 10 requests per second. BurstLimit of 30 requests per second.    UpdateStandardsControl - RateLimit of 1 request per second. BurstLimit of 5 requests per second.   All other operations - RateLimit of 10 requests per second. BurstLimit of 30 requests per second.
public struct SecurityHub: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the SecurityHub client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            serviceName: "SecurityHub",
            serviceIdentifier: "securityhub",
            serviceProtocol: .restjson,
            apiVersion: "2018-10-26",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: SecurityHubErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }




    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.dualstack]: .init(endpoints: [
            "af-south-1": "securityhub.af-south-1.api.aws",
            "ap-east-1": "securityhub.ap-east-1.api.aws",
            "ap-northeast-1": "securityhub.ap-northeast-1.api.aws",
            "ap-northeast-2": "securityhub.ap-northeast-2.api.aws",
            "ap-northeast-3": "securityhub.ap-northeast-3.api.aws",
            "ap-south-1": "securityhub.ap-south-1.api.aws",
            "ap-south-2": "securityhub.ap-south-2.api.aws",
            "ap-southeast-1": "securityhub.ap-southeast-1.api.aws",
            "ap-southeast-2": "securityhub.ap-southeast-2.api.aws",
            "ap-southeast-3": "securityhub.ap-southeast-3.api.aws",
            "ap-southeast-4": "securityhub.ap-southeast-4.api.aws",
            "ap-southeast-5": "securityhub.ap-southeast-5.api.aws",
            "ap-southeast-7": "securityhub.ap-southeast-7.api.aws",
            "ca-central-1": "securityhub.ca-central-1.api.aws",
            "ca-west-1": "securityhub.ca-west-1.api.aws",
            "eu-central-1": "securityhub.eu-central-1.api.aws",
            "eu-central-2": "securityhub.eu-central-2.api.aws",
            "eu-north-1": "securityhub.eu-north-1.api.aws",
            "eu-south-1": "securityhub.eu-south-1.api.aws",
            "eu-south-2": "securityhub.eu-south-2.api.aws",
            "eu-west-1": "securityhub.eu-west-1.api.aws",
            "eu-west-2": "securityhub.eu-west-2.api.aws",
            "eu-west-3": "securityhub.eu-west-3.api.aws",
            "il-central-1": "securityhub.il-central-1.api.aws",
            "me-central-1": "securityhub.me-central-1.api.aws",
            "me-south-1": "securityhub.me-south-1.api.aws",
            "mx-central-1": "securityhub.mx-central-1.api.aws",
            "sa-east-1": "securityhub.sa-east-1.api.aws",
            "us-east-1": "securityhub.us-east-1.api.aws",
            "us-east-2": "securityhub.us-east-2.api.aws",
            "us-gov-east-1": "securityhub.us-gov-east-1.api.aws",
            "us-gov-west-1": "securityhub.us-gov-west-1.api.aws",
            "us-west-1": "securityhub.us-west-1.api.aws",
            "us-west-2": "securityhub.us-west-2.api.aws"
        ]),
        [.fips]: .init(endpoints: [
            "us-east-1": "securityhub-fips.us-east-1.amazonaws.com",
            "us-east-2": "securityhub-fips.us-east-2.amazonaws.com",
            "us-gov-east-1": "securityhub-fips.us-gov-east-1.amazonaws.com",
            "us-gov-west-1": "securityhub-fips.us-gov-west-1.amazonaws.com",
            "us-west-1": "securityhub-fips.us-west-1.amazonaws.com",
            "us-west-2": "securityhub-fips.us-west-2.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    ///  We recommend using Organizations instead of Security Hub invitations to manage your member accounts.  For information, see Managing Security Hub administrator and member accounts with Organizations  in the Security Hub User Guide.  Accepts the invitation to be a member account and be monitored by the Security Hub administrator account that the invitation was sent from. This operation is only used by member accounts that are not added through Organizations. When the member account accepts the invitation, permission is granted to the administrator account to view findings generated in the member account.
    @Sendable
    @inlinable
    public func acceptAdministratorInvitation(_ input: AcceptAdministratorInvitationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AcceptAdministratorInvitationResponse {
        try await self.client.execute(
            operation: "AcceptAdministratorInvitation", 
            path: "/administrator", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  We recommend using Organizations instead of Security Hub invitations to manage your member accounts.  For information, see Managing Security Hub administrator and member accounts with Organizations  in the Security Hub User Guide.  Accepts the invitation to be a member account and be monitored by the Security Hub administrator account that the invitation was sent from. This operation is only used by member accounts that are not added through Organizations. When the member account accepts the invitation, permission is granted to the administrator account to view findings generated in the member account.
    ///
    /// Parameters:
    ///   - administratorId: The account ID of the Security Hub administrator account that sent the invitation.
    ///   - invitationId: The identifier of the invitation sent from the Security Hub administrator account.
    ///   - logger: Logger use during operation
    @inlinable
    public func acceptAdministratorInvitation(
        administratorId: String? = nil,
        invitationId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AcceptAdministratorInvitationResponse {
        let input = AcceptAdministratorInvitationRequest(
            administratorId: administratorId, 
            invitationId: invitationId
        )
        return try await self.acceptAdministratorInvitation(input, logger: logger)
    }

    /// This method is deprecated. Instead, use AcceptAdministratorInvitation. The Security Hub console continues to use AcceptInvitation. It will eventually change to use AcceptAdministratorInvitation. Any IAM policies that specifically control access to this function must continue to use AcceptInvitation. You should also add AcceptAdministratorInvitation to your policies to ensure that the correct permissions are in place after the console begins to use AcceptAdministratorInvitation. Accepts the invitation to be a member account and be monitored by the Security Hub administrator account that the invitation was sent from. This operation is only used by member accounts that are not added through Organizations. When the member account accepts the invitation, permission is granted to the administrator account to view findings generated in the member account.
    @available(*, deprecated, message: "This API has been deprecated, use AcceptAdministratorInvitation API instead.")
    @Sendable
    @inlinable
    public func acceptInvitation(_ input: AcceptInvitationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AcceptInvitationResponse {
        try await self.client.execute(
            operation: "AcceptInvitation", 
            path: "/master", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This method is deprecated. Instead, use AcceptAdministratorInvitation. The Security Hub console continues to use AcceptInvitation. It will eventually change to use AcceptAdministratorInvitation. Any IAM policies that specifically control access to this function must continue to use AcceptInvitation. You should also add AcceptAdministratorInvitation to your policies to ensure that the correct permissions are in place after the console begins to use AcceptAdministratorInvitation. Accepts the invitation to be a member account and be monitored by the Security Hub administrator account that the invitation was sent from. This operation is only used by member accounts that are not added through Organizations. When the member account accepts the invitation, permission is granted to the administrator account to view findings generated in the member account.
    ///
    /// Parameters:
    ///   - invitationId: The identifier of the invitation sent from the Security Hub administrator account.
    ///   - masterId: The account ID of the Security Hub administrator account that sent the invitation.
    ///   - logger: Logger use during operation
    @available(*, deprecated, message: "This API has been deprecated, use AcceptAdministratorInvitation API instead.")
    @inlinable
    public func acceptInvitation(
        invitationId: String? = nil,
        masterId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AcceptInvitationResponse {
        let input = AcceptInvitationRequest(
            invitationId: invitationId, 
            masterId: masterId
        )
        return try await self.acceptInvitation(input, logger: logger)
    }

    ///  Deletes one or more automation rules.
    @Sendable
    @inlinable
    public func batchDeleteAutomationRules(_ input: BatchDeleteAutomationRulesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchDeleteAutomationRulesResponse {
        try await self.client.execute(
            operation: "BatchDeleteAutomationRules", 
            path: "/automationrules/delete", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Deletes one or more automation rules.
    ///
    /// Parameters:
    ///   - automationRulesArns:  A list of Amazon Resource Names (ARNs) for the rules that are to be deleted.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchDeleteAutomationRules(
        automationRulesArns: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchDeleteAutomationRulesResponse {
        let input = BatchDeleteAutomationRulesRequest(
            automationRulesArns: automationRulesArns
        )
        return try await self.batchDeleteAutomationRules(input, logger: logger)
    }

    /// Disables the standards specified by the provided StandardsSubscriptionArns. For more information, see Security Standards section of the Security Hub User Guide.
    @Sendable
    @inlinable
    public func batchDisableStandards(_ input: BatchDisableStandardsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchDisableStandardsResponse {
        try await self.client.execute(
            operation: "BatchDisableStandards", 
            path: "/standards/deregister", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Disables the standards specified by the provided StandardsSubscriptionArns. For more information, see Security Standards section of the Security Hub User Guide.
    ///
    /// Parameters:
    ///   - standardsSubscriptionArns: The ARNs of the standards subscriptions to disable.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchDisableStandards(
        standardsSubscriptionArns: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchDisableStandardsResponse {
        let input = BatchDisableStandardsRequest(
            standardsSubscriptionArns: standardsSubscriptionArns
        )
        return try await self.batchDisableStandards(input, logger: logger)
    }

    /// Enables the standards specified by the provided StandardsArn. To obtain the ARN for a standard, use the DescribeStandards operation. For more information, see the Security Standards section of the Security Hub User Guide.
    @Sendable
    @inlinable
    public func batchEnableStandards(_ input: BatchEnableStandardsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchEnableStandardsResponse {
        try await self.client.execute(
            operation: "BatchEnableStandards", 
            path: "/standards/register", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Enables the standards specified by the provided StandardsArn. To obtain the ARN for a standard, use the DescribeStandards operation. For more information, see the Security Standards section of the Security Hub User Guide.
    ///
    /// Parameters:
    ///   - standardsSubscriptionRequests: The list of standards checks to enable.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchEnableStandards(
        standardsSubscriptionRequests: [StandardsSubscriptionRequest]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchEnableStandardsResponse {
        let input = BatchEnableStandardsRequest(
            standardsSubscriptionRequests: standardsSubscriptionRequests
        )
        return try await self.batchEnableStandards(input, logger: logger)
    }

    ///  Retrieves a list of details for automation rules based on rule Amazon Resource Names  (ARNs).
    @Sendable
    @inlinable
    public func batchGetAutomationRules(_ input: BatchGetAutomationRulesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchGetAutomationRulesResponse {
        try await self.client.execute(
            operation: "BatchGetAutomationRules", 
            path: "/automationrules/get", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Retrieves a list of details for automation rules based on rule Amazon Resource Names  (ARNs).
    ///
    /// Parameters:
    ///   - automationRulesArns:  A list of rule ARNs to get details for.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchGetAutomationRules(
        automationRulesArns: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchGetAutomationRulesResponse {
        let input = BatchGetAutomationRulesRequest(
            automationRulesArns: automationRulesArns
        )
        return try await self.batchGetAutomationRules(input, logger: logger)
    }

    ///  Returns associations between an Security Hub configuration and a batch of target accounts, organizational units, or the root.  Only the Security Hub delegated administrator can invoke this operation from the home Region. A configuration  can refer to a configuration policy or to a self-managed configuration.
    @Sendable
    @inlinable
    public func batchGetConfigurationPolicyAssociations(_ input: BatchGetConfigurationPolicyAssociationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchGetConfigurationPolicyAssociationsResponse {
        try await self.client.execute(
            operation: "BatchGetConfigurationPolicyAssociations", 
            path: "/configurationPolicyAssociation/batchget", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns associations between an Security Hub configuration and a batch of target accounts, organizational units, or the root.  Only the Security Hub delegated administrator can invoke this operation from the home Region. A configuration  can refer to a configuration policy or to a self-managed configuration.
    ///
    /// Parameters:
    ///   - configurationPolicyAssociationIdentifiers:  Specifies one or more target account IDs, organizational unit (OU) IDs, or the root ID to retrieve associations for.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchGetConfigurationPolicyAssociations(
        configurationPolicyAssociationIdentifiers: [ConfigurationPolicyAssociation]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchGetConfigurationPolicyAssociationsResponse {
        let input = BatchGetConfigurationPolicyAssociationsRequest(
            configurationPolicyAssociationIdentifiers: configurationPolicyAssociationIdentifiers
        )
        return try await self.batchGetConfigurationPolicyAssociations(input, logger: logger)
    }

    ///  Provides details about a batch of security controls for the current Amazon Web Services account and Amazon Web Services Region.
    @Sendable
    @inlinable
    public func batchGetSecurityControls(_ input: BatchGetSecurityControlsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchGetSecurityControlsResponse {
        try await self.client.execute(
            operation: "BatchGetSecurityControls", 
            path: "/securityControls/batchGet", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Provides details about a batch of security controls for the current Amazon Web Services account and Amazon Web Services Region.
    ///
    /// Parameters:
    ///   - securityControlIds:  A list of security controls (identified with SecurityControlId, SecurityControlArn, or a mix of both parameters). The security control ID or Amazon Resource Name (ARN) is the same across standards.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchGetSecurityControls(
        securityControlIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchGetSecurityControlsResponse {
        let input = BatchGetSecurityControlsRequest(
            securityControlIds: securityControlIds
        )
        return try await self.batchGetSecurityControls(input, logger: logger)
    }

    ///  For a batch of security controls and standards, identifies whether each control is currently enabled or disabled in a standard.   Calls to this operation return a RESOURCE_NOT_FOUND_EXCEPTION error when the standard subscription for the association has a NOT_READY_FOR_UPDATES value for StandardsControlsUpdatable.
    @Sendable
    @inlinable
    public func batchGetStandardsControlAssociations(_ input: BatchGetStandardsControlAssociationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchGetStandardsControlAssociationsResponse {
        try await self.client.execute(
            operation: "BatchGetStandardsControlAssociations", 
            path: "/associations/batchGet", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  For a batch of security controls and standards, identifies whether each control is currently enabled or disabled in a standard.   Calls to this operation return a RESOURCE_NOT_FOUND_EXCEPTION error when the standard subscription for the association has a NOT_READY_FOR_UPDATES value for StandardsControlsUpdatable.
    ///
    /// Parameters:
    ///   - standardsControlAssociationIds:  An array with one or more objects that includes a security control (identified with SecurityControlId, SecurityControlArn, or a mix of both parameters) and the Amazon Resource Name (ARN) of a standard.  This field is used to query the enablement status of a control in a specified standard. The security control ID or ARN is the same across standards.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchGetStandardsControlAssociations(
        standardsControlAssociationIds: [StandardsControlAssociationId]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchGetStandardsControlAssociationsResponse {
        let input = BatchGetStandardsControlAssociationsRequest(
            standardsControlAssociationIds: standardsControlAssociationIds
        )
        return try await self.batchGetStandardsControlAssociations(input, logger: logger)
    }

    /// Imports security findings generated by a finding provider into Security Hub. This action is requested by the finding provider to import its findings into Security Hub.  BatchImportFindings must be called by one of the following:   The Amazon Web Services account that is associated with a finding if you are using the default product ARN  or are a partner sending findings from within a customer's Amazon Web Services account.  In these cases, the identifier of the account that you are calling BatchImportFindings  from needs to be the same as the AwsAccountId attribute for the finding.   An Amazon Web Services account that Security Hub has allow-listed for an official partner integration. In this case, you can call BatchImportFindings from the allow-listed account and send findings from different customer accounts in the same batch.   The maximum allowed size for a finding is 240 Kb. An error is returned for any finding larger than 240 Kb. After a finding is created, BatchImportFindings cannot be used to update the following finding fields and objects, which Security Hub customers use to manage their investigation workflow.    Note     UserDefinedFields     VerificationState     Workflow    Finding providers also should not use BatchImportFindings to update the following attributes.    Confidence     Criticality     RelatedFindings     Severity     Types    Instead, finding providers use FindingProviderFields to provide values for these attributes.
    @Sendable
    @inlinable
    public func batchImportFindings(_ input: BatchImportFindingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchImportFindingsResponse {
        try await self.client.execute(
            operation: "BatchImportFindings", 
            path: "/findings/import", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Imports security findings generated by a finding provider into Security Hub. This action is requested by the finding provider to import its findings into Security Hub.  BatchImportFindings must be called by one of the following:   The Amazon Web Services account that is associated with a finding if you are using the default product ARN  or are a partner sending findings from within a customer's Amazon Web Services account.  In these cases, the identifier of the account that you are calling BatchImportFindings  from needs to be the same as the AwsAccountId attribute for the finding.   An Amazon Web Services account that Security Hub has allow-listed for an official partner integration. In this case, you can call BatchImportFindings from the allow-listed account and send findings from different customer accounts in the same batch.   The maximum allowed size for a finding is 240 Kb. An error is returned for any finding larger than 240 Kb. After a finding is created, BatchImportFindings cannot be used to update the following finding fields and objects, which Security Hub customers use to manage their investigation workflow.    Note     UserDefinedFields     VerificationState     Workflow    Finding providers also should not use BatchImportFindings to update the following attributes.    Confidence     Criticality     RelatedFindings     Severity     Types    Instead, finding providers use FindingProviderFields to provide values for these attributes.
    ///
    /// Parameters:
    ///   - findings: A list of findings to import. To successfully import a finding, it must follow the Amazon Web Services Security Finding Format. Maximum of 100 findings per request.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchImportFindings(
        findings: [AwsSecurityFinding]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchImportFindingsResponse {
        let input = BatchImportFindingsRequest(
            findings: findings
        )
        return try await self.batchImportFindings(input, logger: logger)
    }

    ///  Updates one or more automation rules based on rule Amazon Resource Names (ARNs)  and input parameters.
    @Sendable
    @inlinable
    public func batchUpdateAutomationRules(_ input: BatchUpdateAutomationRulesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchUpdateAutomationRulesResponse {
        try await self.client.execute(
            operation: "BatchUpdateAutomationRules", 
            path: "/automationrules/update", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Updates one or more automation rules based on rule Amazon Resource Names (ARNs)  and input parameters.
    ///
    /// Parameters:
    ///   - updateAutomationRulesRequestItems:  An array of ARNs for the rules that are to be updated. Optionally, you can also include  RuleStatus and RuleOrder.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchUpdateAutomationRules(
        updateAutomationRulesRequestItems: [UpdateAutomationRulesRequestItem]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchUpdateAutomationRulesResponse {
        let input = BatchUpdateAutomationRulesRequest(
            updateAutomationRulesRequestItems: updateAutomationRulesRequestItems
        )
        return try await self.batchUpdateAutomationRules(input, logger: logger)
    }

    ///  Used by Security Hub customers to update information about their investigation into one or more findings. Requested by administrator accounts or member accounts.  Administrator accounts can update findings for their account and their member accounts.  A member account can update findings only for their own account. Administrator and member accounts can use this operation to update the following fields and objects for one or more findings:     Confidence     Criticality     Note     RelatedFindings     Severity     Types     UserDefinedFields     VerificationState     Workflow     If you use this operation to update a finding, your updates don’t affect the value for the UpdatedAt field of the finding.  Also note that it can take several minutes for Security Hub to process your request and update each finding specified in the request.    You can configure IAM policies to restrict access to fields and field values.  For example, you might not want member accounts to be able to suppress findings or change the finding severity.  For more information see Configuring access to BatchUpdateFindings in the Security Hub User Guide.
    @Sendable
    @inlinable
    public func batchUpdateFindings(_ input: BatchUpdateFindingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchUpdateFindingsResponse {
        try await self.client.execute(
            operation: "BatchUpdateFindings", 
            path: "/findings/batchupdate", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Used by Security Hub customers to update information about their investigation into one or more findings. Requested by administrator accounts or member accounts.  Administrator accounts can update findings for their account and their member accounts.  A member account can update findings only for their own account. Administrator and member accounts can use this operation to update the following fields and objects for one or more findings:     Confidence     Criticality     Note     RelatedFindings     Severity     Types     UserDefinedFields     VerificationState     Workflow     If you use this operation to update a finding, your updates don’t affect the value for the UpdatedAt field of the finding.  Also note that it can take several minutes for Security Hub to process your request and update each finding specified in the request.    You can configure IAM policies to restrict access to fields and field values.  For example, you might not want member accounts to be able to suppress findings or change the finding severity.  For more information see Configuring access to BatchUpdateFindings in the Security Hub User Guide.
    ///
    /// Parameters:
    ///   - confidence: The updated value for the finding confidence. Confidence is defined as the likelihood that a finding accurately identifies the behavior or issue that it was intended to identify. Confidence is scored on a 0-100 basis using a ratio scale, where 0 means zero percent confidence and 100 means 100 percent confidence.
    ///   - criticality: The updated value for the level of importance assigned to the resources associated with the findings. A score of 0 means that the underlying resources have no criticality, and a score of 100 is reserved for the most critical resources.
    ///   - findingIdentifiers: The list of findings to update. BatchUpdateFindings can be used to update up to 100 findings at a time. For each finding, the list provides the finding identifier and the ARN of the finding provider.
    ///   - note: 
    ///   - relatedFindings: A list of findings that are related to the updated findings.
    ///   - severity: Used to update the finding severity.
    ///   - types: One or more finding types in the format of namespace/category/classifier that classify a finding. Valid namespace values are as follows.   Software and Configuration Checks   TTPs   Effects   Unusual Behaviors   Sensitive Data Identifications
    ///   - userDefinedFields: A list of name/value string pairs associated with the finding. These are custom, user-defined fields added to a finding.
    ///   - verificationState: Indicates the veracity of a finding. The available values for VerificationState are  as follows.    UNKNOWN – The default disposition of a security finding    TRUE_POSITIVE – The security finding is confirmed    FALSE_POSITIVE – The security finding was determined to be a false alarm    BENIGN_POSITIVE – A special case of TRUE_POSITIVE where the finding doesn't pose any threat, is expected, or both
    ///   - workflow: Used to update the workflow status of a finding. The workflow status indicates the progress of the investigation into the finding.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchUpdateFindings(
        confidence: Int? = nil,
        criticality: Int? = nil,
        findingIdentifiers: [AwsSecurityFindingIdentifier]? = nil,
        note: NoteUpdate? = nil,
        relatedFindings: [RelatedFinding]? = nil,
        severity: SeverityUpdate? = nil,
        types: [String]? = nil,
        userDefinedFields: [String: String]? = nil,
        verificationState: VerificationState? = nil,
        workflow: WorkflowUpdate? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchUpdateFindingsResponse {
        let input = BatchUpdateFindingsRequest(
            confidence: confidence, 
            criticality: criticality, 
            findingIdentifiers: findingIdentifiers, 
            note: note, 
            relatedFindings: relatedFindings, 
            severity: severity, 
            types: types, 
            userDefinedFields: userDefinedFields, 
            verificationState: verificationState, 
            workflow: workflow
        )
        return try await self.batchUpdateFindings(input, logger: logger)
    }

    /// Used by customers to update information about their investigation into a finding.  Requested by delegated administrator accounts or member accounts.  Delegated administrator accounts can update findings for their account and their member accounts.  Member accounts can update findings for their account. BatchUpdateFindings and BatchUpdateFindingV2 both use securityhub:BatchUpdateFindings in the Action element of an IAM policy statement.  You must have permission to perform the securityhub:BatchUpdateFindings action.  Updates from BatchUpdateFindingsV2 don't affect the value of finding_info.modified_time, finding_info.modified_time_dt, time, time_dt for a finding. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func batchUpdateFindingsV2(_ input: BatchUpdateFindingsV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchUpdateFindingsV2Response {
        try await self.client.execute(
            operation: "BatchUpdateFindingsV2", 
            path: "/findingsv2/batchupdatev2", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Used by customers to update information about their investigation into a finding.  Requested by delegated administrator accounts or member accounts.  Delegated administrator accounts can update findings for their account and their member accounts.  Member accounts can update findings for their account. BatchUpdateFindings and BatchUpdateFindingV2 both use securityhub:BatchUpdateFindings in the Action element of an IAM policy statement.  You must have permission to perform the securityhub:BatchUpdateFindings action.  Updates from BatchUpdateFindingsV2 don't affect the value of finding_info.modified_time, finding_info.modified_time_dt, time, time_dt for a finding. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - comment: The updated value for a user provided comment about the finding.  Minimum character length 1.  Maximum character length 512.
    ///   - findingIdentifiers: Provides information to identify a specific V2 finding.
    ///   - metadataUids: The list of finding metadata.uid to indicate findings to update.  Finding metadata.uid is a globally unique identifier associated with the finding.  Customers cannot use MetadataUids together with FindingIdentifiers.
    ///   - severityId: The updated value for the normalized severity identifier.  The severity ID is an integer with the allowed enum values [0, 1, 2, 3, 4, 5, 99].  When customer provides the updated severity ID, the string sibling severity will automatically be updated in the finding.
    ///   - statusId: The updated value for the normalized status identifier.  The status ID is an integer with the allowed enum values [0, 1, 2, 3, 4, 5, 6, 99].  When customer provides the updated status ID, the string sibling status will automatically be updated in the finding.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchUpdateFindingsV2(
        comment: String? = nil,
        findingIdentifiers: [OcsfFindingIdentifier]? = nil,
        metadataUids: [String]? = nil,
        severityId: Int? = nil,
        statusId: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchUpdateFindingsV2Response {
        let input = BatchUpdateFindingsV2Request(
            comment: comment, 
            findingIdentifiers: findingIdentifiers, 
            metadataUids: metadataUids, 
            severityId: severityId, 
            statusId: statusId
        )
        return try await self.batchUpdateFindingsV2(input, logger: logger)
    }

    ///  For a batch of security controls and standards, this operation updates the enablement status of a control in a standard.
    @Sendable
    @inlinable
    public func batchUpdateStandardsControlAssociations(_ input: BatchUpdateStandardsControlAssociationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchUpdateStandardsControlAssociationsResponse {
        try await self.client.execute(
            operation: "BatchUpdateStandardsControlAssociations", 
            path: "/associations", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  For a batch of security controls and standards, this operation updates the enablement status of a control in a standard.
    ///
    /// Parameters:
    ///   - standardsControlAssociationUpdates:  Updates the enablement status of a security control in a specified standard.   Calls to this operation return a RESOURCE_NOT_FOUND_EXCEPTION error when the standard subscription for the control has StandardsControlsUpdatable value NOT_READY_FOR_UPDATES.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchUpdateStandardsControlAssociations(
        standardsControlAssociationUpdates: [StandardsControlAssociationUpdate]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchUpdateStandardsControlAssociationsResponse {
        let input = BatchUpdateStandardsControlAssociationsRequest(
            standardsControlAssociationUpdates: standardsControlAssociationUpdates
        )
        return try await self.batchUpdateStandardsControlAssociations(input, logger: logger)
    }

    /// Grants permission to complete the authorization based on input parameters. This API is in preview release and subject to change.
    @Sendable
    @inlinable
    public func connectorRegistrationsV2(_ input: ConnectorRegistrationsV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> ConnectorRegistrationsV2Response {
        try await self.client.execute(
            operation: "ConnectorRegistrationsV2", 
            path: "/connectorsv2/registrations", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Grants permission to complete the authorization based on input parameters. This API is in preview release and subject to change.
    ///
    /// Parameters:
    ///   - authCode: The authCode retrieved from authUrl to complete the OAuth 2.0 authorization code flow.
    ///   - authState: The authState retrieved from authUrl to complete the OAuth 2.0 authorization code flow.
    ///   - logger: Logger use during operation
    @inlinable
    public func connectorRegistrationsV2(
        authCode: String? = nil,
        authState: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ConnectorRegistrationsV2Response {
        let input = ConnectorRegistrationsV2Request(
            authCode: authCode, 
            authState: authState
        )
        return try await self.connectorRegistrationsV2(input, logger: logger)
    }

    /// Creates a custom action target in Security Hub. You can use custom actions on findings and insights in Security Hub to trigger target actions in Amazon CloudWatch Events.
    @Sendable
    @inlinable
    public func createActionTarget(_ input: CreateActionTargetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateActionTargetResponse {
        try await self.client.execute(
            operation: "CreateActionTarget", 
            path: "/actionTargets", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a custom action target in Security Hub. You can use custom actions on findings and insights in Security Hub to trigger target actions in Amazon CloudWatch Events.
    ///
    /// Parameters:
    ///   - description: The description for the custom action target.
    ///   - id: The ID for the custom action target. Can contain up to 20 alphanumeric characters.
    ///   - name: The name of the custom action target. Can contain up to 20 characters.
    ///   - logger: Logger use during operation
    @inlinable
    public func createActionTarget(
        description: String? = nil,
        id: String? = nil,
        name: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateActionTargetResponse {
        let input = CreateActionTargetRequest(
            description: description, 
            id: id, 
            name: name
        )
        return try await self.createActionTarget(input, logger: logger)
    }

    /// Enables aggregation across Amazon Web Services Regions. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func createAggregatorV2(_ input: CreateAggregatorV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAggregatorV2Response {
        try await self.client.execute(
            operation: "CreateAggregatorV2", 
            path: "/aggregatorv2/create", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Enables aggregation across Amazon Web Services Regions. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - clientToken: A unique identifier used to ensure idempotency.
    ///   - linkedRegions: The list of Regions that are linked to the aggregation Region.
    ///   - regionLinkingMode: Determines how Regions are linked to an Aggregator V2.
    ///   - tags: A list of key-value pairs to be applied to the AggregatorV2.
    ///   - logger: Logger use during operation
    @inlinable
    public func createAggregatorV2(
        clientToken: String? = CreateAggregatorV2Request.idempotencyToken(),
        linkedRegions: [String]? = nil,
        regionLinkingMode: String? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAggregatorV2Response {
        let input = CreateAggregatorV2Request(
            clientToken: clientToken, 
            linkedRegions: linkedRegions, 
            regionLinkingMode: regionLinkingMode, 
            tags: tags
        )
        return try await self.createAggregatorV2(input, logger: logger)
    }

    ///  Creates an automation rule based on input parameters.
    @Sendable
    @inlinable
    public func createAutomationRule(_ input: CreateAutomationRuleRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAutomationRuleResponse {
        try await self.client.execute(
            operation: "CreateAutomationRule", 
            path: "/automationrules/create", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Creates an automation rule based on input parameters.
    ///
    /// Parameters:
    ///   - actions:  One or more actions to update finding fields if a finding matches the conditions  specified in Criteria.
    ///   - criteria:  A set of ASFF finding field attributes and corresponding expected values that  Security Hub uses to filter findings. If a rule is enabled and a finding matches the conditions specified in this parameter, Security Hub applies the rule action to the finding.
    ///   - description:  A description of the rule.
    ///   - isTerminal: Specifies whether a rule is the last to be applied with respect to a finding that matches the rule criteria. This is useful when a finding  matches the criteria for multiple rules, and each rule has different actions. If a rule is terminal, Security Hub applies the rule action to a finding that matches  the rule criteria and doesn't evaluate other rules for the finding. By default, a rule isn't terminal.
    ///   - ruleName:  The name of the rule.
    ///   - ruleOrder: An integer ranging from 1 to 1000 that represents the order in which the rule action is applied to findings. Security Hub applies rules with lower values for this parameter first.
    ///   - ruleStatus:  Whether the rule is active after it is created. If  this parameter is equal to ENABLED, Security Hub starts applying the rule to findings  and finding updates after the rule is created. To change the value of this parameter after creating a rule, use  BatchUpdateAutomationRules .
    ///   - tags:  User-defined tags associated with an automation rule.
    ///   - logger: Logger use during operation
    @inlinable
    public func createAutomationRule(
        actions: [AutomationRulesAction]? = nil,
        criteria: AutomationRulesFindingFilters? = nil,
        description: String? = nil,
        isTerminal: Bool? = nil,
        ruleName: String? = nil,
        ruleOrder: Int? = nil,
        ruleStatus: RuleStatus? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAutomationRuleResponse {
        let input = CreateAutomationRuleRequest(
            actions: actions, 
            criteria: criteria, 
            description: description, 
            isTerminal: isTerminal, 
            ruleName: ruleName, 
            ruleOrder: ruleOrder, 
            ruleStatus: ruleStatus, 
            tags: tags
        )
        return try await self.createAutomationRule(input, logger: logger)
    }

    /// Creates a V2 automation rule. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func createAutomationRuleV2(_ input: CreateAutomationRuleV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAutomationRuleV2Response {
        try await self.client.execute(
            operation: "CreateAutomationRuleV2", 
            path: "/automationrulesv2/create", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a V2 automation rule. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - actions: A list of actions to be performed when the rule criteria is met.
    ///   - clientToken: A unique identifier used to ensure idempotency.
    ///   - criteria: The filtering type and configuration of the automation rule.
    ///   - description: A description of the V2 automation rule.
    ///   - ruleName: The name of the V2 automation rule.
    ///   - ruleOrder: The value for the rule priority.
    ///   - ruleStatus: The status of the V2 automation rule.
    ///   - tags: A list of key-value pairs associated with the V2 automation rule.
    ///   - logger: Logger use during operation
    @inlinable
    public func createAutomationRuleV2(
        actions: [AutomationRulesActionV2]? = nil,
        clientToken: String? = CreateAutomationRuleV2Request.idempotencyToken(),
        criteria: Criteria? = nil,
        description: String? = nil,
        ruleName: String? = nil,
        ruleOrder: Float? = nil,
        ruleStatus: RuleStatusV2? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAutomationRuleV2Response {
        let input = CreateAutomationRuleV2Request(
            actions: actions, 
            clientToken: clientToken, 
            criteria: criteria, 
            description: description, 
            ruleName: ruleName, 
            ruleOrder: ruleOrder, 
            ruleStatus: ruleStatus, 
            tags: tags
        )
        return try await self.createAutomationRuleV2(input, logger: logger)
    }

    ///  Creates a configuration policy with the defined configuration. Only the Security Hub delegated administrator  can invoke this operation from the home Region.
    @Sendable
    @inlinable
    public func createConfigurationPolicy(_ input: CreateConfigurationPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateConfigurationPolicyResponse {
        try await self.client.execute(
            operation: "CreateConfigurationPolicy", 
            path: "/configurationPolicy/create", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Creates a configuration policy with the defined configuration. Only the Security Hub delegated administrator  can invoke this operation from the home Region.
    ///
    /// Parameters:
    ///   - configurationPolicy:  An object that defines how Security Hub is configured. It includes whether Security Hub is enabled or  disabled, a list of enabled security standards, a list of enabled or disabled security controls, and a list of custom parameter values for specified controls.  If you provide a list of security controls that are enabled in the configuration policy, Security Hub disables all other controls (including newly  released controls). If you provide a list of security controls that are disabled in the configuration policy, Security Hub  enables all other controls (including newly released controls).
    ///   - description:  The description of the configuration policy.
    ///   - name:  The name of the configuration policy. Alphanumeric characters and the following ASCII characters are permitted:  -, ., !, *, /.
    ///   - tags:  User-defined tags associated with a configuration policy. For more information, see  Tagging Security Hub resources  in the Security Hub user guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func createConfigurationPolicy(
        configurationPolicy: Policy? = nil,
        description: String? = nil,
        name: String? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateConfigurationPolicyResponse {
        let input = CreateConfigurationPolicyRequest(
            configurationPolicy: configurationPolicy, 
            description: description, 
            name: name, 
            tags: tags
        )
        return try await self.createConfigurationPolicy(input, logger: logger)
    }

    /// Grants permission to create a connectorV2 based on input parameters. This API is in preview release and subject to change.
    @Sendable
    @inlinable
    public func createConnectorV2(_ input: CreateConnectorV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateConnectorV2Response {
        try await self.client.execute(
            operation: "CreateConnectorV2", 
            path: "/connectorsv2", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Grants permission to create a connectorV2 based on input parameters. This API is in preview release and subject to change.
    ///
    /// Parameters:
    ///   - clientToken: A unique identifier used to ensure idempotency.
    ///   - description: The description of the connectorV2.
    ///   - kmsKeyArn: The Amazon Resource Name (ARN) of KMS key used to encrypt secrets for the connectorV2.
    ///   - name: The unique name of the connectorV2.
    ///   - provider: The third-party provider’s service configuration.
    ///   - tags: The tags to add to the connectorV2 when you create.
    ///   - logger: Logger use during operation
    @inlinable
    public func createConnectorV2(
        clientToken: String? = CreateConnectorV2Request.idempotencyToken(),
        description: String? = nil,
        kmsKeyArn: String? = nil,
        name: String? = nil,
        provider: ProviderConfiguration? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateConnectorV2Response {
        let input = CreateConnectorV2Request(
            clientToken: clientToken, 
            description: description, 
            kmsKeyArn: kmsKeyArn, 
            name: name, 
            provider: provider, 
            tags: tags
        )
        return try await self.createConnectorV2(input, logger: logger)
    }

    ///  The aggregation Region is now called the home Region.  Used to enable cross-Region aggregation. This operation can be invoked from the home Region only. For information about how cross-Region aggregation works, see Understanding cross-Region aggregation in Security Hub in the Security Hub User Guide.
    @Sendable
    @inlinable
    public func createFindingAggregator(_ input: CreateFindingAggregatorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateFindingAggregatorResponse {
        try await self.client.execute(
            operation: "CreateFindingAggregator", 
            path: "/findingAggregator/create", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  The aggregation Region is now called the home Region.  Used to enable cross-Region aggregation. This operation can be invoked from the home Region only. For information about how cross-Region aggregation works, see Understanding cross-Region aggregation in Security Hub in the Security Hub User Guide.
    ///
    /// Parameters:
    ///   - regionLinkingMode: Indicates whether to aggregate findings from all of the available Regions in the current partition. Also determines whether to automatically aggregate findings from new Regions as Security Hub supports them and you opt into them. The selected option also determines how to use the Regions provided in the Regions list. The options are as follows:    ALL_REGIONS - Aggregates findings from all of the Regions where Security Hub is enabled. When you choose this option, Security Hub also automatically aggregates findings from new Regions as Security Hub supports them and you opt into them.     ALL_REGIONS_EXCEPT_SPECIFIED - Aggregates findings from all of the Regions where Security Hub is enabled, except for the Regions listed in the Regions parameter. When you choose this option, Security Hub also automatically aggregates findings from new Regions as Security Hub supports them and you opt into them.     SPECIFIED_REGIONS - Aggregates findings only from the Regions listed in the Regions parameter. Security Hub does not automatically aggregate findings from new Regions.     NO_REGIONS - Aggregates no data because no Regions are selected as linked Regions.
    ///   - regions: If RegionLinkingMode is ALL_REGIONS_EXCEPT_SPECIFIED, then this is a space-separated list of Regions that don't replicate and send findings to the home Region. If RegionLinkingMode is SPECIFIED_REGIONS, then this is a space-separated list of Regions that do replicate and send findings to the home Region.  An InvalidInputException error results if you populate this field while RegionLinkingMode is  NO_REGIONS.
    ///   - logger: Logger use during operation
    @inlinable
    public func createFindingAggregator(
        regionLinkingMode: String? = nil,
        regions: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateFindingAggregatorResponse {
        let input = CreateFindingAggregatorRequest(
            regionLinkingMode: regionLinkingMode, 
            regions: regions
        )
        return try await self.createFindingAggregator(input, logger: logger)
    }

    /// Creates a custom insight in Security Hub. An insight is a consolidation of findings that relate to a security issue that requires attention or remediation. To group the related findings in the insight, use the GroupByAttribute.
    @Sendable
    @inlinable
    public func createInsight(_ input: CreateInsightRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateInsightResponse {
        try await self.client.execute(
            operation: "CreateInsight", 
            path: "/insights", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a custom insight in Security Hub. An insight is a consolidation of findings that relate to a security issue that requires attention or remediation. To group the related findings in the insight, use the GroupByAttribute.
    ///
    /// Parameters:
    ///   - filters: One or more attributes used to filter the findings included in the insight. The insight only includes findings that match the criteria defined in the filters.
    ///   - groupByAttribute: The attribute used to group the findings for the insight. The grouping attribute identifies the type of item that the insight applies to. For example, if an insight is grouped by resource identifier, then the insight produces a list of resource identifiers.
    ///   - name: The name of the custom insight to create.
    ///   - logger: Logger use during operation
    @inlinable
    public func createInsight(
        filters: AwsSecurityFindingFilters? = nil,
        groupByAttribute: String? = nil,
        name: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateInsightResponse {
        let input = CreateInsightRequest(
            filters: filters, 
            groupByAttribute: groupByAttribute, 
            name: name
        )
        return try await self.createInsight(input, logger: logger)
    }

    /// Creates a member association in Security Hub between the specified accounts and the account used to make the request, which is the administrator account. If you are integrated with Organizations, then the administrator account is designated by the organization management account.  CreateMembers is always used to add accounts that are not organization members. For accounts that are managed using Organizations, CreateMembers is only used in the following cases:   Security Hub is not configured to automatically add new organization accounts.   The account was disassociated or deleted in Security Hub.   This action can only be used by an account that has Security Hub enabled. To enable Security Hub, you can use the EnableSecurityHub operation. For accounts that are not organization members, you create the account association and then send an invitation to the member account. To send the invitation, you use the InviteMembers operation. If the account owner accepts the invitation, the account becomes a member account in Security Hub. Accounts that are managed using Organizations don't receive an invitation. They automatically become a member account in Security Hub.   If the organization account does not have Security Hub enabled, then Security Hub and the default standards are automatically enabled. Note that Security Hub cannot be enabled automatically for the organization management account. The organization management account must enable Security Hub before the administrator account enables it as a member account.   For organization accounts that already have Security Hub enabled, Security Hub does not make any other changes to those accounts. It does not change their enabled standards or controls.   A permissions policy is added that permits the administrator account to view the findings generated in the member account. To remove the association between the administrator and member accounts, use the DisassociateFromMasterAccount or DisassociateMembers operation.
    @Sendable
    @inlinable
    public func createMembers(_ input: CreateMembersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateMembersResponse {
        try await self.client.execute(
            operation: "CreateMembers", 
            path: "/members", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a member association in Security Hub between the specified accounts and the account used to make the request, which is the administrator account. If you are integrated with Organizations, then the administrator account is designated by the organization management account.  CreateMembers is always used to add accounts that are not organization members. For accounts that are managed using Organizations, CreateMembers is only used in the following cases:   Security Hub is not configured to automatically add new organization accounts.   The account was disassociated or deleted in Security Hub.   This action can only be used by an account that has Security Hub enabled. To enable Security Hub, you can use the EnableSecurityHub operation. For accounts that are not organization members, you create the account association and then send an invitation to the member account. To send the invitation, you use the InviteMembers operation. If the account owner accepts the invitation, the account becomes a member account in Security Hub. Accounts that are managed using Organizations don't receive an invitation. They automatically become a member account in Security Hub.   If the organization account does not have Security Hub enabled, then Security Hub and the default standards are automatically enabled. Note that Security Hub cannot be enabled automatically for the organization management account. The organization management account must enable Security Hub before the administrator account enables it as a member account.   For organization accounts that already have Security Hub enabled, Security Hub does not make any other changes to those accounts. It does not change their enabled standards or controls.   A permissions policy is added that permits the administrator account to view the findings generated in the member account. To remove the association between the administrator and member accounts, use the DisassociateFromMasterAccount or DisassociateMembers operation.
    ///
    /// Parameters:
    ///   - accountDetails: The list of accounts to associate with the Security Hub administrator account. For each account, the list includes the account ID and optionally the email address.
    ///   - logger: Logger use during operation
    @inlinable
    public func createMembers(
        accountDetails: [AccountDetails]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateMembersResponse {
        let input = CreateMembersRequest(
            accountDetails: accountDetails
        )
        return try await self.createMembers(input, logger: logger)
    }

    /// Grants permission to create a ticket in the chosen ITSM based on finding information for the provided finding metadata UID. This API is in preview release and subject to change.
    @Sendable
    @inlinable
    public func createTicketV2(_ input: CreateTicketV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateTicketV2Response {
        try await self.client.execute(
            operation: "CreateTicketV2", 
            path: "/ticketsv2", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Grants permission to create a ticket in the chosen ITSM based on finding information for the provided finding metadata UID. This API is in preview release and subject to change.
    ///
    /// Parameters:
    ///   - clientToken: The client idempotency token.
    ///   - connectorId: The UUID of the connectorV2 to identify connectorV2 resource.
    ///   - findingMetadataUid: The the unique ID for the finding.
    ///   - logger: Logger use during operation
    @inlinable
    public func createTicketV2(
        clientToken: String? = CreateTicketV2Request.idempotencyToken(),
        connectorId: String? = nil,
        findingMetadataUid: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateTicketV2Response {
        let input = CreateTicketV2Request(
            clientToken: clientToken, 
            connectorId: connectorId, 
            findingMetadataUid: findingMetadataUid
        )
        return try await self.createTicketV2(input, logger: logger)
    }

    ///  We recommend using Organizations instead of Security Hub invitations to manage your member accounts.  For information, see Managing Security Hub administrator and member accounts with Organizations  in the Security Hub User Guide.  Declines invitations to become a Security Hub member account. A prospective member account uses this operation to decline an invitation to become a member. Only member accounts that aren't part of an Amazon Web Services organization should use this operation. Organization accounts don't receive invitations.
    @Sendable
    @inlinable
    public func declineInvitations(_ input: DeclineInvitationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeclineInvitationsResponse {
        try await self.client.execute(
            operation: "DeclineInvitations", 
            path: "/invitations/decline", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  We recommend using Organizations instead of Security Hub invitations to manage your member accounts.  For information, see Managing Security Hub administrator and member accounts with Organizations  in the Security Hub User Guide.  Declines invitations to become a Security Hub member account. A prospective member account uses this operation to decline an invitation to become a member. Only member accounts that aren't part of an Amazon Web Services organization should use this operation. Organization accounts don't receive invitations.
    ///
    /// Parameters:
    ///   - accountIds: The list of prospective member account IDs for which to decline an invitation.
    ///   - logger: Logger use during operation
    @inlinable
    public func declineInvitations(
        accountIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeclineInvitationsResponse {
        let input = DeclineInvitationsRequest(
            accountIds: accountIds
        )
        return try await self.declineInvitations(input, logger: logger)
    }

    /// Deletes a custom action target from Security Hub. Deleting a custom action target does not affect any findings or insights that were already sent to Amazon CloudWatch Events using the custom action.
    @Sendable
    @inlinable
    public func deleteActionTarget(_ input: DeleteActionTargetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteActionTargetResponse {
        try await self.client.execute(
            operation: "DeleteActionTarget", 
            path: "/actionTargets/{ActionTargetArn+}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a custom action target from Security Hub. Deleting a custom action target does not affect any findings or insights that were already sent to Amazon CloudWatch Events using the custom action.
    ///
    /// Parameters:
    ///   - actionTargetArn: The Amazon Resource Name (ARN) of the custom action target to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteActionTarget(
        actionTargetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteActionTargetResponse {
        let input = DeleteActionTargetRequest(
            actionTargetArn: actionTargetArn
        )
        return try await self.deleteActionTarget(input, logger: logger)
    }

    /// Deletes the Aggregator V2. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func deleteAggregatorV2(_ input: DeleteAggregatorV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteAggregatorV2Response {
        try await self.client.execute(
            operation: "DeleteAggregatorV2", 
            path: "/aggregatorv2/delete/{AggregatorV2Arn+}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the Aggregator V2. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - aggregatorV2Arn: The ARN of the Aggregator V2.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAggregatorV2(
        aggregatorV2Arn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteAggregatorV2Response {
        let input = DeleteAggregatorV2Request(
            aggregatorV2Arn: aggregatorV2Arn
        )
        return try await self.deleteAggregatorV2(input, logger: logger)
    }

    /// Deletes a V2 automation rule. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func deleteAutomationRuleV2(_ input: DeleteAutomationRuleV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteAutomationRuleV2Response {
        try await self.client.execute(
            operation: "DeleteAutomationRuleV2", 
            path: "/automationrulesv2/{Identifier}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a V2 automation rule. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - identifier: The ARN of the V2 automation rule.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAutomationRuleV2(
        identifier: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteAutomationRuleV2Response {
        let input = DeleteAutomationRuleV2Request(
            identifier: identifier
        )
        return try await self.deleteAutomationRuleV2(input, logger: logger)
    }

    ///  Deletes a configuration policy. Only the Security Hub delegated administrator can invoke this operation  from the home Region. For the deletion to succeed, you must first disassociate a configuration policy from target accounts,  organizational units, or the root by invoking the StartConfigurationPolicyDisassociation operation.
    @Sendable
    @inlinable
    public func deleteConfigurationPolicy(_ input: DeleteConfigurationPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteConfigurationPolicyResponse {
        try await self.client.execute(
            operation: "DeleteConfigurationPolicy", 
            path: "/configurationPolicy/{Identifier}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Deletes a configuration policy. Only the Security Hub delegated administrator can invoke this operation  from the home Region. For the deletion to succeed, you must first disassociate a configuration policy from target accounts,  organizational units, or the root by invoking the StartConfigurationPolicyDisassociation operation.
    ///
    /// Parameters:
    ///   - identifier:  The Amazon Resource Name (ARN) or universally unique identifier (UUID) of the configuration policy.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteConfigurationPolicy(
        identifier: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteConfigurationPolicyResponse {
        let input = DeleteConfigurationPolicyRequest(
            identifier: identifier
        )
        return try await self.deleteConfigurationPolicy(input, logger: logger)
    }

    /// Grants permission to delete a connectorV2. This API is in preview release and subject to change.
    @Sendable
    @inlinable
    public func deleteConnectorV2(_ input: DeleteConnectorV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteConnectorV2Response {
        try await self.client.execute(
            operation: "DeleteConnectorV2", 
            path: "/connectorsv2/{ConnectorId+}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Grants permission to delete a connectorV2. This API is in preview release and subject to change.
    ///
    /// Parameters:
    ///   - connectorId: The UUID of the connectorV2 to identify connectorV2 resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteConnectorV2(
        connectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteConnectorV2Response {
        let input = DeleteConnectorV2Request(
            connectorId: connectorId
        )
        return try await self.deleteConnectorV2(input, logger: logger)
    }

    ///  The aggregation Region is now called the home Region.  Deletes a finding aggregator. When you delete the finding aggregator, you stop cross-Region aggregation. Finding replication stops
    /// occurring from the linked Regions to the home Region. When you stop cross-Region aggregation, findings that were already replicated and sent to the home Region are still visible from  the home Region. However, new findings and finding updates are no longer replicated and sent to the home Region.
    @Sendable
    @inlinable
    public func deleteFindingAggregator(_ input: DeleteFindingAggregatorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteFindingAggregatorResponse {
        try await self.client.execute(
            operation: "DeleteFindingAggregator", 
            path: "/findingAggregator/delete/{FindingAggregatorArn+}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  The aggregation Region is now called the home Region.  Deletes a finding aggregator. When you delete the finding aggregator, you stop cross-Region aggregation. Finding replication stops
    /// occurring from the linked Regions to the home Region. When you stop cross-Region aggregation, findings that were already replicated and sent to the home Region are still visible from  the home Region. However, new findings and finding updates are no longer replicated and sent to the home Region.
    ///
    /// Parameters:
    ///   - findingAggregatorArn: The ARN of the finding aggregator to delete. To obtain the ARN, use ListFindingAggregators.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteFindingAggregator(
        findingAggregatorArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteFindingAggregatorResponse {
        let input = DeleteFindingAggregatorRequest(
            findingAggregatorArn: findingAggregatorArn
        )
        return try await self.deleteFindingAggregator(input, logger: logger)
    }

    /// Deletes the insight specified by the InsightArn.
    @Sendable
    @inlinable
    public func deleteInsight(_ input: DeleteInsightRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteInsightResponse {
        try await self.client.execute(
            operation: "DeleteInsight", 
            path: "/insights/{InsightArn+}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the insight specified by the InsightArn.
    ///
    /// Parameters:
    ///   - insightArn: The ARN of the insight to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteInsight(
        insightArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteInsightResponse {
        let input = DeleteInsightRequest(
            insightArn: insightArn
        )
        return try await self.deleteInsight(input, logger: logger)
    }

    ///  We recommend using Organizations instead of Security Hub invitations to manage your member accounts.  For information, see Managing Security Hub administrator and member accounts with Organizations  in the Security Hub User Guide.  Deletes invitations to become a Security Hub member account. A Security Hub administrator account can use this operation to delete invitations sent to one or more prospective member accounts. This operation is only used to delete invitations that are sent to prospective member accounts that aren't part of an Amazon Web Services organization. Organization accounts don't receive invitations.
    @Sendable
    @inlinable
    public func deleteInvitations(_ input: DeleteInvitationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteInvitationsResponse {
        try await self.client.execute(
            operation: "DeleteInvitations", 
            path: "/invitations/delete", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  We recommend using Organizations instead of Security Hub invitations to manage your member accounts.  For information, see Managing Security Hub administrator and member accounts with Organizations  in the Security Hub User Guide.  Deletes invitations to become a Security Hub member account. A Security Hub administrator account can use this operation to delete invitations sent to one or more prospective member accounts. This operation is only used to delete invitations that are sent to prospective member accounts that aren't part of an Amazon Web Services organization. Organization accounts don't receive invitations.
    ///
    /// Parameters:
    ///   - accountIds: The list of member account IDs that received the invitations you want to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteInvitations(
        accountIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteInvitationsResponse {
        let input = DeleteInvitationsRequest(
            accountIds: accountIds
        )
        return try await self.deleteInvitations(input, logger: logger)
    }

    /// Deletes the specified member accounts from Security Hub. You can invoke this API only to delete accounts that became members through invitation. You can't invoke this  API to delete accounts that belong to an Organizations organization.
    @Sendable
    @inlinable
    public func deleteMembers(_ input: DeleteMembersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteMembersResponse {
        try await self.client.execute(
            operation: "DeleteMembers", 
            path: "/members/delete", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified member accounts from Security Hub. You can invoke this API only to delete accounts that became members through invitation. You can't invoke this  API to delete accounts that belong to an Organizations organization.
    ///
    /// Parameters:
    ///   - accountIds: The list of account IDs for the member accounts to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteMembers(
        accountIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteMembersResponse {
        let input = DeleteMembersRequest(
            accountIds: accountIds
        )
        return try await self.deleteMembers(input, logger: logger)
    }

    /// Returns a list of the custom action targets in Security Hub in your account.
    @Sendable
    @inlinable
    public func describeActionTargets(_ input: DescribeActionTargetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeActionTargetsResponse {
        try await self.client.execute(
            operation: "DescribeActionTargets", 
            path: "/actionTargets/get", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of the custom action targets in Security Hub in your account.
    ///
    /// Parameters:
    ///   - actionTargetArns: A list of custom action target ARNs for the custom action targets to retrieve.
    ///   - maxResults: The maximum number of results to return.
    ///   - nextToken: The token that is required for pagination. On your first call to the DescribeActionTargets operation, set the value of this parameter to NULL. For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeActionTargets(
        actionTargetArns: [String]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeActionTargetsResponse {
        let input = DescribeActionTargetsRequest(
            actionTargetArns: actionTargetArns, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeActionTargets(input, logger: logger)
    }

    /// Returns details about the Hub resource in your account, including the HubArn and the time when you enabled Security Hub.
    @Sendable
    @inlinable
    public func describeHub(_ input: DescribeHubRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeHubResponse {
        try await self.client.execute(
            operation: "DescribeHub", 
            path: "/accounts", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns details about the Hub resource in your account, including the HubArn and the time when you enabled Security Hub.
    ///
    /// Parameters:
    ///   - hubArn: The ARN of the Hub resource to retrieve.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeHub(
        hubArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeHubResponse {
        let input = DescribeHubRequest(
            hubArn: hubArn
        )
        return try await self.describeHub(input, logger: logger)
    }

    /// Returns information about the way your organization is configured in Security Hub. Only the  Security Hub administrator account can invoke this operation.
    @Sendable
    @inlinable
    public func describeOrganizationConfiguration(_ input: DescribeOrganizationConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeOrganizationConfigurationResponse {
        try await self.client.execute(
            operation: "DescribeOrganizationConfiguration", 
            path: "/organization/configuration", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the way your organization is configured in Security Hub. Only the  Security Hub administrator account can invoke this operation.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func describeOrganizationConfiguration(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeOrganizationConfigurationResponse {
        let input = DescribeOrganizationConfigurationRequest(
        )
        return try await self.describeOrganizationConfiguration(input, logger: logger)
    }

    /// Returns information about product integrations in Security Hub. You can optionally provide an integration ARN. If you provide an integration ARN, then the results only include that integration. If you don't provide an integration ARN, then the results include all of the available product integrations.
    @Sendable
    @inlinable
    public func describeProducts(_ input: DescribeProductsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeProductsResponse {
        try await self.client.execute(
            operation: "DescribeProducts", 
            path: "/products", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about product integrations in Security Hub. You can optionally provide an integration ARN. If you provide an integration ARN, then the results only include that integration. If you don't provide an integration ARN, then the results include all of the available product integrations.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return.
    ///   - nextToken: The token that is required for pagination. On your first call to the DescribeProducts operation, set the value of this parameter to NULL. For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.
    ///   - productArn: The ARN of the integration to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeProducts(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        productArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeProductsResponse {
        let input = DescribeProductsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            productArn: productArn
        )
        return try await self.describeProducts(input, logger: logger)
    }

    /// Gets information about the product integration. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func describeProductsV2(_ input: DescribeProductsV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeProductsV2Response {
        try await self.client.execute(
            operation: "DescribeProductsV2", 
            path: "/productsV2", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets information about the product integration. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return.
    ///   - nextToken: The token required for pagination.  On your first call, set the value of this parameter to NULL.  For subsequent calls, to continue listing data, set the value of this parameter to the value returned in the previous response.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeProductsV2(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeProductsV2Response {
        let input = DescribeProductsV2Request(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeProductsV2(input, logger: logger)
    }

    /// Returns details about the service resource in your account. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func describeSecurityHubV2(_ input: DescribeSecurityHubV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeSecurityHubV2Response {
        try await self.client.execute(
            operation: "DescribeSecurityHubV2", 
            path: "/hubv2", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns details about the service resource in your account. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func describeSecurityHubV2(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeSecurityHubV2Response {
        let input = DescribeSecurityHubV2Request(
        )
        return try await self.describeSecurityHubV2(input, logger: logger)
    }

    /// Returns a list of the available standards in Security Hub. For each standard, the results include the standard ARN, the name, and a description.
    @Sendable
    @inlinable
    public func describeStandards(_ input: DescribeStandardsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeStandardsResponse {
        try await self.client.execute(
            operation: "DescribeStandards", 
            path: "/standards", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of the available standards in Security Hub. For each standard, the results include the standard ARN, the name, and a description.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of standards to return.
    ///   - nextToken: The token that is required for pagination. On your first call to the DescribeStandards operation, set the value of this parameter to NULL. For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeStandards(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeStandardsResponse {
        let input = DescribeStandardsRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeStandards(input, logger: logger)
    }

    /// Returns a list of security standards controls. For each control, the results include information about whether it is currently enabled, the severity, and a link to remediation information. This operation returns an empty list for standard subscriptions where StandardsControlsUpdatable has value NOT_READY_FOR_UPDATES.
    @Sendable
    @inlinable
    public func describeStandardsControls(_ input: DescribeStandardsControlsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeStandardsControlsResponse {
        try await self.client.execute(
            operation: "DescribeStandardsControls", 
            path: "/standards/controls/{StandardsSubscriptionArn+}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of security standards controls. For each control, the results include information about whether it is currently enabled, the severity, and a link to remediation information. This operation returns an empty list for standard subscriptions where StandardsControlsUpdatable has value NOT_READY_FOR_UPDATES.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of security standard controls to return.
    ///   - nextToken: The token that is required for pagination. On your first call to the DescribeStandardsControls operation, set the value of this parameter to NULL. For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.
    ///   - standardsSubscriptionArn: The ARN of a resource that represents your subscription to a supported standard. To get the subscription ARNs of the standards you have enabled, use the GetEnabledStandards operation.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeStandardsControls(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        standardsSubscriptionArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeStandardsControlsResponse {
        let input = DescribeStandardsControlsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            standardsSubscriptionArn: standardsSubscriptionArn
        )
        return try await self.describeStandardsControls(input, logger: logger)
    }

    /// Disables the integration of the specified product with Security Hub. After the integration is disabled, findings from that product are no longer sent to Security Hub.
    @Sendable
    @inlinable
    public func disableImportFindingsForProduct(_ input: DisableImportFindingsForProductRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DisableImportFindingsForProductResponse {
        try await self.client.execute(
            operation: "DisableImportFindingsForProduct", 
            path: "/productSubscriptions/{ProductSubscriptionArn+}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Disables the integration of the specified product with Security Hub. After the integration is disabled, findings from that product are no longer sent to Security Hub.
    ///
    /// Parameters:
    ///   - productSubscriptionArn: The ARN of the integrated product to disable the integration for.
    ///   - logger: Logger use during operation
    @inlinable
    public func disableImportFindingsForProduct(
        productSubscriptionArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DisableImportFindingsForProductResponse {
        let input = DisableImportFindingsForProductRequest(
            productSubscriptionArn: productSubscriptionArn
        )
        return try await self.disableImportFindingsForProduct(input, logger: logger)
    }

    /// Disables a Security Hub administrator account. Can only be called by the organization management account.
    @Sendable
    @inlinable
    public func disableOrganizationAdminAccount(_ input: DisableOrganizationAdminAccountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DisableOrganizationAdminAccountResponse {
        try await self.client.execute(
            operation: "DisableOrganizationAdminAccount", 
            path: "/organization/admin/disable", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Disables a Security Hub administrator account. Can only be called by the organization management account.
    ///
    /// Parameters:
    ///   - adminAccountId: The Amazon Web Services account identifier of the Security Hub administrator account.
    ///   - feature: The feature for which the delegated admin account is disabled.  Defaults to Security Hub if not specified.
    ///   - logger: Logger use during operation
    @inlinable
    public func disableOrganizationAdminAccount(
        adminAccountId: String? = nil,
        feature: SecurityHubFeature? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DisableOrganizationAdminAccountResponse {
        let input = DisableOrganizationAdminAccountRequest(
            adminAccountId: adminAccountId, 
            feature: feature
        )
        return try await self.disableOrganizationAdminAccount(input, logger: logger)
    }

    /// Disables Security Hub in your account only in the current Amazon Web Services Region. To disable Security Hub in all Regions, you must submit one request per Region where you have enabled Security Hub. You can't disable Security Hub in an account that is currently the Security Hub administrator. When you disable Security Hub, your existing findings and insights and any Security Hub configuration settings are deleted after 90 days and cannot be recovered. Any standards that were enabled are disabled, and your administrator and member account associations are removed. If you want to save your existing findings, you must export them before you disable Security Hub.
    @Sendable
    @inlinable
    public func disableSecurityHub(_ input: DisableSecurityHubRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DisableSecurityHubResponse {
        try await self.client.execute(
            operation: "DisableSecurityHub", 
            path: "/accounts", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Disables Security Hub in your account only in the current Amazon Web Services Region. To disable Security Hub in all Regions, you must submit one request per Region where you have enabled Security Hub. You can't disable Security Hub in an account that is currently the Security Hub administrator. When you disable Security Hub, your existing findings and insights and any Security Hub configuration settings are deleted after 90 days and cannot be recovered. Any standards that were enabled are disabled, and your administrator and member account associations are removed. If you want to save your existing findings, you must export them before you disable Security Hub.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func disableSecurityHub(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DisableSecurityHubResponse {
        let input = DisableSecurityHubRequest(
        )
        return try await self.disableSecurityHub(input, logger: logger)
    }

    /// Disable the service for the current Amazon Web Services Region or specified Amazon Web Services Region. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func disableSecurityHubV2(_ input: DisableSecurityHubV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> DisableSecurityHubV2Response {
        try await self.client.execute(
            operation: "DisableSecurityHubV2", 
            path: "/hubv2", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Disable the service for the current Amazon Web Services Region or specified Amazon Web Services Region. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func disableSecurityHubV2(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DisableSecurityHubV2Response {
        let input = DisableSecurityHubV2Request(
        )
        return try await self.disableSecurityHubV2(input, logger: logger)
    }

    /// Disassociates the current Security Hub member account from the associated administrator account. This operation is only used by accounts that are not part of an organization. For organization accounts, only the administrator account can disassociate a member account.
    @Sendable
    @inlinable
    public func disassociateFromAdministratorAccount(_ input: DisassociateFromAdministratorAccountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DisassociateFromAdministratorAccountResponse {
        try await self.client.execute(
            operation: "DisassociateFromAdministratorAccount", 
            path: "/administrator/disassociate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Disassociates the current Security Hub member account from the associated administrator account. This operation is only used by accounts that are not part of an organization. For organization accounts, only the administrator account can disassociate a member account.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func disassociateFromAdministratorAccount(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DisassociateFromAdministratorAccountResponse {
        let input = DisassociateFromAdministratorAccountRequest(
        )
        return try await self.disassociateFromAdministratorAccount(input, logger: logger)
    }

    /// This method is deprecated. Instead, use DisassociateFromAdministratorAccount. The Security Hub console continues to use DisassociateFromMasterAccount. It will eventually change to use DisassociateFromAdministratorAccount. Any IAM policies that specifically control access to this function must continue to use DisassociateFromMasterAccount. You should also add DisassociateFromAdministratorAccount to your policies to ensure that the correct permissions are in place after the console begins to use DisassociateFromAdministratorAccount. Disassociates the current Security Hub member account from the associated administrator account. This operation is only used by accounts that are not part of an organization. For organization accounts, only the administrator account can disassociate a member account.
    @available(*, deprecated, message: "This API has been deprecated, use DisassociateFromAdministratorAccount API instead.")
    @Sendable
    @inlinable
    public func disassociateFromMasterAccount(_ input: DisassociateFromMasterAccountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DisassociateFromMasterAccountResponse {
        try await self.client.execute(
            operation: "DisassociateFromMasterAccount", 
            path: "/master/disassociate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This method is deprecated. Instead, use DisassociateFromAdministratorAccount. The Security Hub console continues to use DisassociateFromMasterAccount. It will eventually change to use DisassociateFromAdministratorAccount. Any IAM policies that specifically control access to this function must continue to use DisassociateFromMasterAccount. You should also add DisassociateFromAdministratorAccount to your policies to ensure that the correct permissions are in place after the console begins to use DisassociateFromAdministratorAccount. Disassociates the current Security Hub member account from the associated administrator account. This operation is only used by accounts that are not part of an organization. For organization accounts, only the administrator account can disassociate a member account.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @available(*, deprecated, message: "This API has been deprecated, use DisassociateFromAdministratorAccount API instead.")
    @inlinable
    public func disassociateFromMasterAccount(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DisassociateFromMasterAccountResponse {
        let input = DisassociateFromMasterAccountRequest(
        )
        return try await self.disassociateFromMasterAccount(input, logger: logger)
    }

    /// Disassociates the specified member accounts from the associated administrator account. Can be used to disassociate both accounts that are managed using Organizations and accounts that were invited manually.
    @Sendable
    @inlinable
    public func disassociateMembers(_ input: DisassociateMembersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DisassociateMembersResponse {
        try await self.client.execute(
            operation: "DisassociateMembers", 
            path: "/members/disassociate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Disassociates the specified member accounts from the associated administrator account. Can be used to disassociate both accounts that are managed using Organizations and accounts that were invited manually.
    ///
    /// Parameters:
    ///   - accountIds: The account IDs of the member accounts to disassociate from the administrator account.
    ///   - logger: Logger use during operation
    @inlinable
    public func disassociateMembers(
        accountIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DisassociateMembersResponse {
        let input = DisassociateMembersRequest(
            accountIds: accountIds
        )
        return try await self.disassociateMembers(input, logger: logger)
    }

    /// Enables the integration of a partner product with Security Hub. Integrated products send findings to Security Hub. When you enable a product integration, a permissions policy that grants permission for the product to send findings to Security Hub is applied.
    @Sendable
    @inlinable
    public func enableImportFindingsForProduct(_ input: EnableImportFindingsForProductRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> EnableImportFindingsForProductResponse {
        try await self.client.execute(
            operation: "EnableImportFindingsForProduct", 
            path: "/productSubscriptions", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Enables the integration of a partner product with Security Hub. Integrated products send findings to Security Hub. When you enable a product integration, a permissions policy that grants permission for the product to send findings to Security Hub is applied.
    ///
    /// Parameters:
    ///   - productArn: The ARN of the product to enable the integration for.
    ///   - logger: Logger use during operation
    @inlinable
    public func enableImportFindingsForProduct(
        productArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> EnableImportFindingsForProductResponse {
        let input = EnableImportFindingsForProductRequest(
            productArn: productArn
        )
        return try await self.enableImportFindingsForProduct(input, logger: logger)
    }

    /// Designates the Security Hub administrator account for an organization. Can only be called by the organization management account.
    @Sendable
    @inlinable
    public func enableOrganizationAdminAccount(_ input: EnableOrganizationAdminAccountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> EnableOrganizationAdminAccountResponse {
        try await self.client.execute(
            operation: "EnableOrganizationAdminAccount", 
            path: "/organization/admin/enable", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Designates the Security Hub administrator account for an organization. Can only be called by the organization management account.
    ///
    /// Parameters:
    ///   - adminAccountId: The Amazon Web Services account identifier of the account to designate as the Security Hub administrator account.
    ///   - feature: The feature for which the delegated admin account is enabled.  Defaults to Security Hub if not specified.
    ///   - logger: Logger use during operation
    @inlinable
    public func enableOrganizationAdminAccount(
        adminAccountId: String? = nil,
        feature: SecurityHubFeature? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> EnableOrganizationAdminAccountResponse {
        let input = EnableOrganizationAdminAccountRequest(
            adminAccountId: adminAccountId, 
            feature: feature
        )
        return try await self.enableOrganizationAdminAccount(input, logger: logger)
    }

    /// Enables Security Hub for your account in the current Region or the Region you specify in the request. When you enable Security Hub, you grant to Security Hub the permissions necessary to gather findings from other services that are integrated with Security Hub. When you use the EnableSecurityHub operation to enable Security Hub, you also automatically enable the following standards:   Center for Internet Security (CIS) Amazon Web Services Foundations Benchmark v1.2.0   Amazon Web Services Foundational Security Best Practices   Other standards are not automatically enabled.  To opt out of automatically enabled standards, set EnableDefaultStandards to false. After you enable Security Hub, to enable a standard, use the BatchEnableStandards operation. To disable a standard, use the BatchDisableStandards operation. To learn more, see the setup information in the Security Hub User Guide.
    @Sendable
    @inlinable
    public func enableSecurityHub(_ input: EnableSecurityHubRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> EnableSecurityHubResponse {
        try await self.client.execute(
            operation: "EnableSecurityHub", 
            path: "/accounts", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Enables Security Hub for your account in the current Region or the Region you specify in the request. When you enable Security Hub, you grant to Security Hub the permissions necessary to gather findings from other services that are integrated with Security Hub. When you use the EnableSecurityHub operation to enable Security Hub, you also automatically enable the following standards:   Center for Internet Security (CIS) Amazon Web Services Foundations Benchmark v1.2.0   Amazon Web Services Foundational Security Best Practices   Other standards are not automatically enabled.  To opt out of automatically enabled standards, set EnableDefaultStandards to false. After you enable Security Hub, to enable a standard, use the BatchEnableStandards operation. To disable a standard, use the BatchDisableStandards operation. To learn more, see the setup information in the Security Hub User Guide.
    ///
    /// Parameters:
    ///   - controlFindingGenerator: This field, used when enabling Security Hub, specifies whether the calling account has consolidated control findings turned on.  If the value for this field is set to  SECURITY_CONTROL, Security Hub generates a single finding for a control check even when the check  applies to multiple enabled standards. If the value for this field is set to STANDARD_CONTROL, Security Hub generates separate findings  for a control check when the check applies to multiple enabled standards. The value for this field in a member account matches the value in the administrator account. For accounts that aren't part of an organization, the default value of this field is SECURITY_CONTROL if you enabled Security Hub on or after February 23, 2023.
    ///   - enableDefaultStandards: Whether to enable the security standards that Security Hub has designated as automatically enabled. If you don't provide a value for EnableDefaultStandards, it is set to true. To not enable the automatically enabled standards, set EnableDefaultStandards to false.
    ///   - tags: The tags to add to the hub resource when you enable Security Hub.
    ///   - logger: Logger use during operation
    @inlinable
    public func enableSecurityHub(
        controlFindingGenerator: ControlFindingGenerator? = nil,
        enableDefaultStandards: Bool? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> EnableSecurityHubResponse {
        let input = EnableSecurityHubRequest(
            controlFindingGenerator: controlFindingGenerator, 
            enableDefaultStandards: enableDefaultStandards, 
            tags: tags
        )
        return try await self.enableSecurityHub(input, logger: logger)
    }

    /// Enables the service in account for the current Amazon Web Services Region or specified Amazon Web Services Region. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func enableSecurityHubV2(_ input: EnableSecurityHubV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> EnableSecurityHubV2Response {
        try await self.client.execute(
            operation: "EnableSecurityHubV2", 
            path: "/hubv2", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Enables the service in account for the current Amazon Web Services Region or specified Amazon Web Services Region. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - tags: The tags to add to the hub V2 resource when you enable Security Hub.
    ///   - logger: Logger use during operation
    @inlinable
    public func enableSecurityHubV2(
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> EnableSecurityHubV2Response {
        let input = EnableSecurityHubV2Request(
            tags: tags
        )
        return try await self.enableSecurityHubV2(input, logger: logger)
    }

    /// Provides the details for the Security Hub administrator account for the current member account. Can be used by both member accounts that are managed using Organizations and accounts that were invited manually.
    @Sendable
    @inlinable
    public func getAdministratorAccount(_ input: GetAdministratorAccountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetAdministratorAccountResponse {
        try await self.client.execute(
            operation: "GetAdministratorAccount", 
            path: "/administrator", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provides the details for the Security Hub administrator account for the current member account. Can be used by both member accounts that are managed using Organizations and accounts that were invited manually.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func getAdministratorAccount(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetAdministratorAccountResponse {
        let input = GetAdministratorAccountRequest(
        )
        return try await self.getAdministratorAccount(input, logger: logger)
    }

    /// Returns the configuration of the specified Aggregator V2. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func getAggregatorV2(_ input: GetAggregatorV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> GetAggregatorV2Response {
        try await self.client.execute(
            operation: "GetAggregatorV2", 
            path: "/aggregatorv2/get/{AggregatorV2Arn+}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the configuration of the specified Aggregator V2. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - aggregatorV2Arn: The ARN of the Aggregator V2.
    ///   - logger: Logger use during operation
    @inlinable
    public func getAggregatorV2(
        aggregatorV2Arn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetAggregatorV2Response {
        let input = GetAggregatorV2Request(
            aggregatorV2Arn: aggregatorV2Arn
        )
        return try await self.getAggregatorV2(input, logger: logger)
    }

    /// Returns an automation rule for the V2 service. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func getAutomationRuleV2(_ input: GetAutomationRuleV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> GetAutomationRuleV2Response {
        try await self.client.execute(
            operation: "GetAutomationRuleV2", 
            path: "/automationrulesv2/{Identifier}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns an automation rule for the V2 service. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - identifier: The ARN of the V2 automation rule.
    ///   - logger: Logger use during operation
    @inlinable
    public func getAutomationRuleV2(
        identifier: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetAutomationRuleV2Response {
        let input = GetAutomationRuleV2Request(
            identifier: identifier
        )
        return try await self.getAutomationRuleV2(input, logger: logger)
    }

    ///  Provides information about a configuration policy. Only the Security Hub delegated administrator can invoke  this operation from the home Region.
    @Sendable
    @inlinable
    public func getConfigurationPolicy(_ input: GetConfigurationPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetConfigurationPolicyResponse {
        try await self.client.execute(
            operation: "GetConfigurationPolicy", 
            path: "/configurationPolicy/get/{Identifier}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Provides information about a configuration policy. Only the Security Hub delegated administrator can invoke  this operation from the home Region.
    ///
    /// Parameters:
    ///   - identifier:  The Amazon Resource Name (ARN) or universally unique identifier (UUID) of the configuration policy.
    ///   - logger: Logger use during operation
    @inlinable
    public func getConfigurationPolicy(
        identifier: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetConfigurationPolicyResponse {
        let input = GetConfigurationPolicyRequest(
            identifier: identifier
        )
        return try await self.getConfigurationPolicy(input, logger: logger)
    }

    ///  Returns the association between a configuration and a target account, organizational unit, or the root. The  configuration can be a configuration policy or self-managed behavior. Only the Security Hub delegated administrator can  invoke this operation from the home Region.
    @Sendable
    @inlinable
    public func getConfigurationPolicyAssociation(_ input: GetConfigurationPolicyAssociationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetConfigurationPolicyAssociationResponse {
        try await self.client.execute(
            operation: "GetConfigurationPolicyAssociation", 
            path: "/configurationPolicyAssociation/get", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns the association between a configuration and a target account, organizational unit, or the root. The  configuration can be a configuration policy or self-managed behavior. Only the Security Hub delegated administrator can  invoke this operation from the home Region.
    ///
    /// Parameters:
    ///   - target:  The target account ID, organizational unit ID, or the root ID to retrieve the association for.
    ///   - logger: Logger use during operation
    @inlinable
    public func getConfigurationPolicyAssociation(
        target: Target? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetConfigurationPolicyAssociationResponse {
        let input = GetConfigurationPolicyAssociationRequest(
            target: target
        )
        return try await self.getConfigurationPolicyAssociation(input, logger: logger)
    }

    /// Grants permission to retrieve details for a connectorV2 based on connector id. This API is in preview release and subject to change.
    @Sendable
    @inlinable
    public func getConnectorV2(_ input: GetConnectorV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> GetConnectorV2Response {
        try await self.client.execute(
            operation: "GetConnectorV2", 
            path: "/connectorsv2/{ConnectorId+}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Grants permission to retrieve details for a connectorV2 based on connector id. This API is in preview release and subject to change.
    ///
    /// Parameters:
    ///   - connectorId: The UUID of the connectorV2 to identify connectorV2 resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func getConnectorV2(
        connectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetConnectorV2Response {
        let input = GetConnectorV2Request(
            connectorId: connectorId
        )
        return try await self.getConnectorV2(input, logger: logger)
    }

    /// Returns a list of the standards that are currently enabled.
    @Sendable
    @inlinable
    public func getEnabledStandards(_ input: GetEnabledStandardsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetEnabledStandardsResponse {
        try await self.client.execute(
            operation: "GetEnabledStandards", 
            path: "/standards/get", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of the standards that are currently enabled.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return in the response.
    ///   - nextToken: The token that is required for pagination. On your first call to the GetEnabledStandards operation, set the value of this parameter to NULL. For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.
    ///   - standardsSubscriptionArns: The list of the standards subscription ARNs for the standards to retrieve.
    ///   - logger: Logger use during operation
    @inlinable
    public func getEnabledStandards(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        standardsSubscriptionArns: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetEnabledStandardsResponse {
        let input = GetEnabledStandardsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            standardsSubscriptionArns: standardsSubscriptionArns
        )
        return try await self.getEnabledStandards(input, logger: logger)
    }

    ///  The aggregation Region is now called the home Region.  Returns the current configuration in the calling account for cross-Region aggregation. A finding aggregator is a resource that establishes
    /// the home Region and any linked Regions.
    @Sendable
    @inlinable
    public func getFindingAggregator(_ input: GetFindingAggregatorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetFindingAggregatorResponse {
        try await self.client.execute(
            operation: "GetFindingAggregator", 
            path: "/findingAggregator/get/{FindingAggregatorArn+}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  The aggregation Region is now called the home Region.  Returns the current configuration in the calling account for cross-Region aggregation. A finding aggregator is a resource that establishes
    /// the home Region and any linked Regions.
    ///
    /// Parameters:
    ///   - findingAggregatorArn: The ARN of the finding aggregator to return details for. To obtain the ARN, use ListFindingAggregators.
    ///   - logger: Logger use during operation
    @inlinable
    public func getFindingAggregator(
        findingAggregatorArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetFindingAggregatorResponse {
        let input = GetFindingAggregatorRequest(
            findingAggregatorArn: findingAggregatorArn
        )
        return try await self.getFindingAggregator(input, logger: logger)
    }

    ///  Returns the history of a Security Hub finding. The history includes changes made to any fields in  the Amazon Web Services Security Finding Format (ASFF) except top-level timestamp fields, such as the CreatedAt and  UpdatedAt fields.  This operation might return fewer results than the maximum number of results (MaxResults) specified in a request, even  when more results are available. If this occurs, the response includes a NextToken value, which you should use to retrieve  the next set of results in the response. The presence of a NextToken value in a response doesn't necessarily indicate  that the results are incomplete. However, you should continue to specify a NextToken value until you receive a  response that doesn't include this value.
    @Sendable
    @inlinable
    public func getFindingHistory(_ input: GetFindingHistoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetFindingHistoryResponse {
        try await self.client.execute(
            operation: "GetFindingHistory", 
            path: "/findingHistory/get", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns the history of a Security Hub finding. The history includes changes made to any fields in  the Amazon Web Services Security Finding Format (ASFF) except top-level timestamp fields, such as the CreatedAt and  UpdatedAt fields.  This operation might return fewer results than the maximum number of results (MaxResults) specified in a request, even  when more results are available. If this occurs, the response includes a NextToken value, which you should use to retrieve  the next set of results in the response. The presence of a NextToken value in a response doesn't necessarily indicate  that the results are incomplete. However, you should continue to specify a NextToken value until you receive a  response that doesn't include this value.
    ///
    /// Parameters:
    ///   - endTime:  An ISO 8601-formatted timestamp that indicates the end time of the requested finding history. If you provide values for both StartTime and EndTime, Security Hub returns finding history for the specified time period. If you provide a value for StartTime but not for EndTime, Security Hub returns finding history from the StartTime to the time at which the API is called. If you provide a value for EndTime but not for StartTime, Security Hub returns finding history from the CreatedAt timestamp of the finding to the EndTime. If you provide neither StartTime nor EndTime, Security Hub returns finding history from the CreatedAt timestamp of the finding to the time at which the API is called. In all of these scenarios, the response is limited to 100 results. For more information about the validation and formatting of timestamp fields in Security Hub, see Timestamps.
    ///   - findingIdentifier: 
    ///   - maxResults:  The maximum number of results to be returned. If you don’t provide it, Security Hub returns up to 100 results of finding history.
    ///   - nextToken:  A token for pagination purposes. Provide NULL as the initial value. In subsequent requests, provide the  token included in the response to get up to an additional 100 results of finding history. If you don’t provide  NextToken, Security Hub returns up to 100 results of finding history for each request.
    ///   - startTime: A timestamp that indicates the start time of the requested finding history. If you provide values for both StartTime and EndTime, Security Hub returns finding history for the specified time period. If you provide a value for StartTime but not for EndTime, Security Hub returns finding history from the StartTime to the time at which the API is called. If you provide a value for EndTime but not for StartTime, Security Hub returns finding history from the CreatedAt timestamp of the finding to the EndTime. If you provide neither StartTime nor EndTime, Security Hub returns finding history from the CreatedAt timestamp of the finding to the time at which the API is called. In all of these scenarios, the response is limited to 100 results. For more information about the validation and formatting of timestamp fields in Security Hub, see Timestamps.
    ///   - logger: Logger use during operation
    @inlinable
    public func getFindingHistory(
        endTime: Date? = nil,
        findingIdentifier: AwsSecurityFindingIdentifier? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        startTime: Date? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetFindingHistoryResponse {
        let input = GetFindingHistoryRequest(
            endTime: endTime, 
            findingIdentifier: findingIdentifier, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            startTime: startTime
        )
        return try await self.getFindingHistory(input, logger: logger)
    }

    /// Returns aggregated statistical data about findings. GetFindingStatisticsV2 use securityhub:GetAdhocInsightResults in the Action element of an IAM policy statement.  You must have permission to perform the s action. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func getFindingStatisticsV2(_ input: GetFindingStatisticsV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> GetFindingStatisticsV2Response {
        try await self.client.execute(
            operation: "GetFindingStatisticsV2", 
            path: "/findingsv2/statistics", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns aggregated statistical data about findings. GetFindingStatisticsV2 use securityhub:GetAdhocInsightResults in the Action element of an IAM policy statement.  You must have permission to perform the s action. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - groupByRules: Specifies how security findings should be aggregated and organized in the statistical analysis.  It can accept up to 5 groupBy fields in a single call.
    ///   - maxStatisticResults: The maximum number of results to be returned.
    ///   - sortOrder: Orders the aggregation count in descending or ascending order.  Descending order is the default.
    ///   - logger: Logger use during operation
    @inlinable
    public func getFindingStatisticsV2(
        groupByRules: [GroupByRule]? = nil,
        maxStatisticResults: Int? = nil,
        sortOrder: SortOrder? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetFindingStatisticsV2Response {
        let input = GetFindingStatisticsV2Request(
            groupByRules: groupByRules, 
            maxStatisticResults: maxStatisticResults, 
            sortOrder: sortOrder
        )
        return try await self.getFindingStatisticsV2(input, logger: logger)
    }

    /// Returns a list of findings that match the specified criteria. If cross-Region aggregation is enabled, then when you call GetFindings from the home Region, the results include all of the matching findings from both the home Region and linked Regions.
    @Sendable
    @inlinable
    public func getFindings(_ input: GetFindingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetFindingsResponse {
        try await self.client.execute(
            operation: "GetFindings", 
            path: "/findings", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of findings that match the specified criteria. If cross-Region aggregation is enabled, then when you call GetFindings from the home Region, the results include all of the matching findings from both the home Region and linked Regions.
    ///
    /// Parameters:
    ///   - filters: The finding attributes used to define a condition to filter the returned findings. You can filter by up to 10 finding attributes. For each attribute, you can provide up to 20 filter values. Note that in the available filter fields, WorkflowState is deprecated. To search for a finding based on its workflow status, use WorkflowStatus.
    ///   - maxResults: The maximum number of findings to return.
    ///   - nextToken: The token that is required for pagination. On your first call to the GetFindings operation, set the value of this parameter to NULL. For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.
    ///   - sortCriteria: The finding attributes used to sort the list of returned findings.
    ///   - logger: Logger use during operation
    @inlinable
    public func getFindings(
        filters: AwsSecurityFindingFilters? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        sortCriteria: [SortCriterion]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetFindingsResponse {
        let input = GetFindingsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            sortCriteria: sortCriteria
        )
        return try await self.getFindings(input, logger: logger)
    }

    /// Return a list of findings that match the specified criteria. GetFindings and GetFindingsV2 both use securityhub:GetFindings in the Action element of an IAM policy statement.  You must have permission to perform the securityhub:GetFindings action. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func getFindingsV2(_ input: GetFindingsV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> GetFindingsV2Response {
        try await self.client.execute(
            operation: "GetFindingsV2", 
            path: "/findingsv2", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Return a list of findings that match the specified criteria. GetFindings and GetFindingsV2 both use securityhub:GetFindings in the Action element of an IAM policy statement.  You must have permission to perform the securityhub:GetFindings action. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - filters: The finding attributes used to define a condition to filter the returned OCSF findings.  You can filter up to 10 composite filters.  For each filter type inside of a composite filter, you can provide up to 20 filters.
    ///   - maxResults: The maximum number of results to return.
    ///   - nextToken:  The token required for pagination.  On your first call, set the value of this parameter to NULL.  For subsequent calls, to continue listing data, set the value of this parameter to the value returned in the previous response.
    ///   - sortCriteria: The finding attributes used to sort the list of returned findings.
    ///   - logger: Logger use during operation
    @inlinable
    public func getFindingsV2(
        filters: OcsfFindingFilters? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        sortCriteria: [SortCriterion]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetFindingsV2Response {
        let input = GetFindingsV2Request(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            sortCriteria: sortCriteria
        )
        return try await self.getFindingsV2(input, logger: logger)
    }

    /// Lists the results of the Security Hub insight specified by the insight ARN.
    @Sendable
    @inlinable
    public func getInsightResults(_ input: GetInsightResultsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetInsightResultsResponse {
        try await self.client.execute(
            operation: "GetInsightResults", 
            path: "/insights/results/{InsightArn+}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the results of the Security Hub insight specified by the insight ARN.
    ///
    /// Parameters:
    ///   - insightArn: The ARN of the insight for which to return results.
    ///   - logger: Logger use during operation
    @inlinable
    public func getInsightResults(
        insightArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetInsightResultsResponse {
        let input = GetInsightResultsRequest(
            insightArn: insightArn
        )
        return try await self.getInsightResults(input, logger: logger)
    }

    /// Lists and describes insights for the specified insight ARNs.
    @Sendable
    @inlinable
    public func getInsights(_ input: GetInsightsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetInsightsResponse {
        try await self.client.execute(
            operation: "GetInsights", 
            path: "/insights/get", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists and describes insights for the specified insight ARNs.
    ///
    /// Parameters:
    ///   - insightArns: The ARNs of the insights to describe. If you don't provide any insight ARNs, then GetInsights returns all of your custom insights. It does not return any managed insights.
    ///   - maxResults: The maximum number of items to return in the response.
    ///   - nextToken: The token that is required for pagination. On your first call to the GetInsights operation, set the value of this parameter to NULL. For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.
    ///   - logger: Logger use during operation
    @inlinable
    public func getInsights(
        insightArns: [String]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetInsightsResponse {
        let input = GetInsightsRequest(
            insightArns: insightArns, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.getInsights(input, logger: logger)
    }

    ///  We recommend using Organizations instead of Security Hub invitations to manage your member accounts.  For information, see Managing Security Hub administrator and member accounts with Organizations  in the Security Hub User Guide.  Returns the count of all Security Hub membership invitations that were sent to the calling member account, not including the currently accepted invitation.
    @Sendable
    @inlinable
    public func getInvitationsCount(_ input: GetInvitationsCountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetInvitationsCountResponse {
        try await self.client.execute(
            operation: "GetInvitationsCount", 
            path: "/invitations/count", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  We recommend using Organizations instead of Security Hub invitations to manage your member accounts.  For information, see Managing Security Hub administrator and member accounts with Organizations  in the Security Hub User Guide.  Returns the count of all Security Hub membership invitations that were sent to the calling member account, not including the currently accepted invitation.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func getInvitationsCount(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetInvitationsCountResponse {
        let input = GetInvitationsCountRequest(
        )
        return try await self.getInvitationsCount(input, logger: logger)
    }

    /// This method is deprecated. Instead, use GetAdministratorAccount. The Security Hub console continues to use GetMasterAccount. It will eventually change to use GetAdministratorAccount. Any IAM policies that specifically control access to this function must continue to use GetMasterAccount. You should also add GetAdministratorAccount to your policies to ensure that the correct permissions are in place after the console begins to use GetAdministratorAccount. Provides the details for the Security Hub administrator account for the current member account. Can be used by both member accounts that are managed using Organizations and accounts that were invited manually.
    @available(*, deprecated, message: "This API has been deprecated, use GetAdministratorAccount API instead.")
    @Sendable
    @inlinable
    public func getMasterAccount(_ input: GetMasterAccountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetMasterAccountResponse {
        try await self.client.execute(
            operation: "GetMasterAccount", 
            path: "/master", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// This method is deprecated. Instead, use GetAdministratorAccount. The Security Hub console continues to use GetMasterAccount. It will eventually change to use GetAdministratorAccount. Any IAM policies that specifically control access to this function must continue to use GetMasterAccount. You should also add GetAdministratorAccount to your policies to ensure that the correct permissions are in place after the console begins to use GetAdministratorAccount. Provides the details for the Security Hub administrator account for the current member account. Can be used by both member accounts that are managed using Organizations and accounts that were invited manually.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @available(*, deprecated, message: "This API has been deprecated, use GetAdministratorAccount API instead.")
    @inlinable
    public func getMasterAccount(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetMasterAccountResponse {
        let input = GetMasterAccountRequest(
        )
        return try await self.getMasterAccount(input, logger: logger)
    }

    /// Returns the details for the Security Hub member accounts for the specified account IDs. An administrator account can be either the delegated Security Hub administrator account for an organization or an administrator account that enabled Security Hub manually. The results include both member accounts that are managed using Organizations and accounts that were invited manually.
    @Sendable
    @inlinable
    public func getMembers(_ input: GetMembersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetMembersResponse {
        try await self.client.execute(
            operation: "GetMembers", 
            path: "/members/get", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the details for the Security Hub member accounts for the specified account IDs. An administrator account can be either the delegated Security Hub administrator account for an organization or an administrator account that enabled Security Hub manually. The results include both member accounts that are managed using Organizations and accounts that were invited manually.
    ///
    /// Parameters:
    ///   - accountIds: The list of account IDs for the Security Hub member accounts to return the details for.
    ///   - logger: Logger use during operation
    @inlinable
    public func getMembers(
        accountIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetMembersResponse {
        let input = GetMembersRequest(
            accountIds: accountIds
        )
        return try await self.getMembers(input, logger: logger)
    }

    /// Retrieves statistical information about Amazon Web Services resources and their associated security findings. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func getResourcesStatisticsV2(_ input: GetResourcesStatisticsV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> GetResourcesStatisticsV2Response {
        try await self.client.execute(
            operation: "GetResourcesStatisticsV2", 
            path: "/resourcesv2/statistics", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves statistical information about Amazon Web Services resources and their associated security findings. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - groupByRules: How resource statistics should be aggregated and organized in the response.
    ///   - maxStatisticResults: The maximum number of results to be returned.
    ///   - sortOrder: Sorts aggregated statistics.
    ///   - logger: Logger use during operation
    @inlinable
    public func getResourcesStatisticsV2(
        groupByRules: [ResourceGroupByRule]? = nil,
        maxStatisticResults: Int? = nil,
        sortOrder: SortOrder? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetResourcesStatisticsV2Response {
        let input = GetResourcesStatisticsV2Request(
            groupByRules: groupByRules, 
            maxStatisticResults: maxStatisticResults, 
            sortOrder: sortOrder
        )
        return try await self.getResourcesStatisticsV2(input, logger: logger)
    }

    /// Returns a list of resources. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func getResourcesV2(_ input: GetResourcesV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> GetResourcesV2Response {
        try await self.client.execute(
            operation: "GetResourcesV2", 
            path: "/resourcesv2", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of resources. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - filters: Filters resources based on a set of criteria.
    ///   - maxResults: The maximum number of results to return.
    ///   - nextToken: The token required for pagination.  On your first call, set the value of this parameter to NULL.  For subsequent calls, to continue listing data, set the value of this parameter to the value returned in the previous response.
    ///   - sortCriteria: The finding attributes used to sort the list of returned findings.
    ///   - logger: Logger use during operation
    @inlinable
    public func getResourcesV2(
        filters: ResourcesFilters? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        sortCriteria: [SortCriterion]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetResourcesV2Response {
        let input = GetResourcesV2Request(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            sortCriteria: sortCriteria
        )
        return try await self.getResourcesV2(input, logger: logger)
    }

    ///  Retrieves the definition of a security control. The definition includes the control title, description, Region availability, parameter definitions, and other details.
    @Sendable
    @inlinable
    public func getSecurityControlDefinition(_ input: GetSecurityControlDefinitionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetSecurityControlDefinitionResponse {
        try await self.client.execute(
            operation: "GetSecurityControlDefinition", 
            path: "/securityControl/definition", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Retrieves the definition of a security control. The definition includes the control title, description, Region availability, parameter definitions, and other details.
    ///
    /// Parameters:
    ///   - securityControlId:  The ID of the security control to retrieve the definition for. This field doesn’t accept an Amazon Resource Name (ARN).
    ///   - logger: Logger use during operation
    @inlinable
    public func getSecurityControlDefinition(
        securityControlId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetSecurityControlDefinitionResponse {
        let input = GetSecurityControlDefinitionRequest(
            securityControlId: securityControlId
        )
        return try await self.getSecurityControlDefinition(input, logger: logger)
    }

    ///  We recommend using Organizations instead of Security Hub invitations to manage your member accounts.  For information, see Managing Security Hub administrator and member accounts with Organizations  in the Security Hub User Guide.  Invites other Amazon Web Services accounts to become member accounts for the Security Hub administrator account that the invitation is sent from. This operation is only used to invite accounts that don't belong to an Amazon Web Services organization. Organization accounts don't receive invitations. Before you can use this action to invite a member, you must first use the CreateMembers action to create the member account in Security Hub. When the account owner enables Security Hub and accepts the invitation to become a member account, the administrator account can view the findings generated in the member account.
    @Sendable
    @inlinable
    public func inviteMembers(_ input: InviteMembersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> InviteMembersResponse {
        try await self.client.execute(
            operation: "InviteMembers", 
            path: "/members/invite", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  We recommend using Organizations instead of Security Hub invitations to manage your member accounts.  For information, see Managing Security Hub administrator and member accounts with Organizations  in the Security Hub User Guide.  Invites other Amazon Web Services accounts to become member accounts for the Security Hub administrator account that the invitation is sent from. This operation is only used to invite accounts that don't belong to an Amazon Web Services organization. Organization accounts don't receive invitations. Before you can use this action to invite a member, you must first use the CreateMembers action to create the member account in Security Hub. When the account owner enables Security Hub and accepts the invitation to become a member account, the administrator account can view the findings generated in the member account.
    ///
    /// Parameters:
    ///   - accountIds: The list of account IDs of the Amazon Web Services accounts to invite to Security Hub as members.
    ///   - logger: Logger use during operation
    @inlinable
    public func inviteMembers(
        accountIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> InviteMembersResponse {
        let input = InviteMembersRequest(
            accountIds: accountIds
        )
        return try await self.inviteMembers(input, logger: logger)
    }

    /// Retrieves a list of V2 aggregators. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func listAggregatorsV2(_ input: ListAggregatorsV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAggregatorsV2Response {
        try await self.client.execute(
            operation: "ListAggregatorsV2", 
            path: "/aggregatorv2/list", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a list of V2 aggregators. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return.
    ///   - nextToken: The token required for pagination.  On your first call, set the value of this parameter to NULL.  For subsequent calls, to continue listing data, set the value of this parameter to the value returned in the previous response.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAggregatorsV2(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAggregatorsV2Response {
        let input = ListAggregatorsV2Request(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAggregatorsV2(input, logger: logger)
    }

    ///  A list of automation rules and their metadata for the calling account.
    @Sendable
    @inlinable
    public func listAutomationRules(_ input: ListAutomationRulesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAutomationRulesResponse {
        try await self.client.execute(
            operation: "ListAutomationRules", 
            path: "/automationrules/list", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  A list of automation rules and their metadata for the calling account.
    ///
    /// Parameters:
    ///   - maxResults:  The maximum number of rules to return in the response. This currently ranges from 1 to 100.
    ///   - nextToken:  A token to specify where to start paginating the response. This is the NextToken  from a previously truncated response. On your first call to the ListAutomationRules  API, set the value of this parameter to NULL.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAutomationRules(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAutomationRulesResponse {
        let input = ListAutomationRulesRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAutomationRules(input, logger: logger)
    }

    /// Returns a list of automation rules and metadata for the calling account. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func listAutomationRulesV2(_ input: ListAutomationRulesV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAutomationRulesV2Response {
        try await self.client.execute(
            operation: "ListAutomationRulesV2", 
            path: "/automationrulesv2/list", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of automation rules and metadata for the calling account. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return.
    ///   - nextToken: The token required for pagination.  On your first call, set the value of this parameter to NULL.  For subsequent calls, to continue listing data, set the value of this parameter to the value returned in the previous response.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAutomationRulesV2(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAutomationRulesV2Response {
        let input = ListAutomationRulesV2Request(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAutomationRulesV2(input, logger: logger)
    }

    ///  Lists the configuration policies that the Security Hub delegated administrator has created for your  organization. Only the delegated administrator can invoke this operation from the home Region.
    @Sendable
    @inlinable
    public func listConfigurationPolicies(_ input: ListConfigurationPoliciesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListConfigurationPoliciesResponse {
        try await self.client.execute(
            operation: "ListConfigurationPolicies", 
            path: "/configurationPolicy/list", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Lists the configuration policies that the Security Hub delegated administrator has created for your  organization. Only the delegated administrator can invoke this operation from the home Region.
    ///
    /// Parameters:
    ///   - maxResults:  The maximum number of results that's returned by ListConfigurationPolicies in each page of the response.  When this parameter is used, ListConfigurationPolicies returns the specified number of results in a  single page and a NextToken response element. You can see the remaining results of the initial request  by sending another ListConfigurationPolicies request with the returned NextToken value. A  valid range for MaxResults is between 1 and 100.
    ///   - nextToken:  The NextToken value that's returned from a previous paginated ListConfigurationPolicies request where  MaxResults was used but the results exceeded the value of that parameter. Pagination continues from the  MaxResults was used but the results exceeded the value of that parameter. Pagination continues from the  end of the previous response that returned the NextToken value. This value is null when  there are no more results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listConfigurationPolicies(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListConfigurationPoliciesResponse {
        let input = ListConfigurationPoliciesRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listConfigurationPolicies(input, logger: logger)
    }

    ///  Provides information about the associations for your configuration policies and self-managed behavior. Only the  Security Hub delegated administrator can invoke this operation from the home Region.
    @Sendable
    @inlinable
    public func listConfigurationPolicyAssociations(_ input: ListConfigurationPolicyAssociationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListConfigurationPolicyAssociationsResponse {
        try await self.client.execute(
            operation: "ListConfigurationPolicyAssociations", 
            path: "/configurationPolicyAssociation/list", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Provides information about the associations for your configuration policies and self-managed behavior. Only the  Security Hub delegated administrator can invoke this operation from the home Region.
    ///
    /// Parameters:
    ///   - filters:  Options for filtering the ListConfigurationPolicyAssociations response. You can filter by the Amazon Resource Name (ARN) or  universally unique identifier (UUID) of a configuration, AssociationType, or AssociationStatus.
    ///   - maxResults:  The maximum number of results that's returned by ListConfigurationPolicies in each page of the response.  When this parameter is used, ListConfigurationPolicyAssociations returns the specified number of results  in a single page and a NextToken response element. You can see the remaining results of the initial  request by sending another ListConfigurationPolicyAssociations request with the returned NextToken  value. A valid range for MaxResults is between 1 and 100.
    ///   - nextToken:  The NextToken value that's returned from a previous paginated ListConfigurationPolicyAssociations  request where MaxResults was used but the results exceeded the value of that parameter. Pagination  continues from the end of the previous response that returned the NextToken value. This value is null  when there are no more results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listConfigurationPolicyAssociations(
        filters: AssociationFilters? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListConfigurationPolicyAssociationsResponse {
        let input = ListConfigurationPolicyAssociationsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listConfigurationPolicyAssociations(input, logger: logger)
    }

    /// Grants permission to retrieve a list of connectorsV2 and their metadata for the calling account. This API is in preview release and subject to change.
    @Sendable
    @inlinable
    public func listConnectorsV2(_ input: ListConnectorsV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> ListConnectorsV2Response {
        try await self.client.execute(
            operation: "ListConnectorsV2", 
            path: "/connectorsv2", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Grants permission to retrieve a list of connectorsV2 and their metadata for the calling account. This API is in preview release and subject to change.
    ///
    /// Parameters:
    ///   - connectorStatus: The status for the connectorV2.
    ///   - maxResults: The maximum number of results to be returned.
    ///   - nextToken: The pagination token per the Amazon Web Services Pagination standard
    ///   - providerName: The name of the third-party provider.
    ///   - logger: Logger use during operation
    @inlinable
    public func listConnectorsV2(
        connectorStatus: ConnectorStatus? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        providerName: ConnectorProviderName? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListConnectorsV2Response {
        let input = ListConnectorsV2Request(
            connectorStatus: connectorStatus, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            providerName: providerName
        )
        return try await self.listConnectorsV2(input, logger: logger)
    }

    /// Lists all findings-generating solutions (products) that you are subscribed to receive findings from in Security Hub.
    @Sendable
    @inlinable
    public func listEnabledProductsForImport(_ input: ListEnabledProductsForImportRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListEnabledProductsForImportResponse {
        try await self.client.execute(
            operation: "ListEnabledProductsForImport", 
            path: "/productSubscriptions", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all findings-generating solutions (products) that you are subscribed to receive findings from in Security Hub.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to return in the response.
    ///   - nextToken: The token that is required for pagination. On your first call to the ListEnabledProductsForImport operation, set the value of this parameter to NULL. For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.
    ///   - logger: Logger use during operation
    @inlinable
    public func listEnabledProductsForImport(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListEnabledProductsForImportResponse {
        let input = ListEnabledProductsForImportRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listEnabledProductsForImport(input, logger: logger)
    }

    /// If cross-Region aggregation is enabled, then ListFindingAggregators returns the Amazon Resource Name (ARN)
    /// of the finding aggregator. You can run this operation from any Amazon Web Services Region.
    @Sendable
    @inlinable
    public func listFindingAggregators(_ input: ListFindingAggregatorsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListFindingAggregatorsResponse {
        try await self.client.execute(
            operation: "ListFindingAggregators", 
            path: "/findingAggregator/list", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// If cross-Region aggregation is enabled, then ListFindingAggregators returns the Amazon Resource Name (ARN)
    /// of the finding aggregator. You can run this operation from any Amazon Web Services Region.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return. This operation currently only returns a single result.
    ///   - nextToken: The token returned with the previous set of results. Identifies the next set of results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listFindingAggregators(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListFindingAggregatorsResponse {
        let input = ListFindingAggregatorsRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listFindingAggregators(input, logger: logger)
    }

    ///  We recommend using Organizations instead of Security Hub invitations to manage your member accounts.  For information, see Managing Security Hub administrator and member accounts with Organizations  in the Security Hub User Guide.  Lists all Security Hub membership invitations that were sent to the calling account. Only accounts that are managed by invitation can use this operation. Accounts that are managed using the integration with Organizations don't receive invitations.
    @Sendable
    @inlinable
    public func listInvitations(_ input: ListInvitationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListInvitationsResponse {
        try await self.client.execute(
            operation: "ListInvitations", 
            path: "/invitations", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  We recommend using Organizations instead of Security Hub invitations to manage your member accounts.  For information, see Managing Security Hub administrator and member accounts with Organizations  in the Security Hub User Guide.  Lists all Security Hub membership invitations that were sent to the calling account. Only accounts that are managed by invitation can use this operation. Accounts that are managed using the integration with Organizations don't receive invitations.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to return in the response.
    ///   - nextToken: The token that is required for pagination. On your first call to the ListInvitations operation, set the value of this parameter to NULL. For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.
    ///   - logger: Logger use during operation
    @inlinable
    public func listInvitations(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListInvitationsResponse {
        let input = ListInvitationsRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listInvitations(input, logger: logger)
    }

    /// Lists details about all member accounts for the current Security Hub administrator account. The results include both member accounts that belong to an organization and member accounts that were invited manually.
    @Sendable
    @inlinable
    public func listMembers(_ input: ListMembersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListMembersResponse {
        try await self.client.execute(
            operation: "ListMembers", 
            path: "/members", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists details about all member accounts for the current Security Hub administrator account. The results include both member accounts that belong to an organization and member accounts that were invited manually.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to return in the response.
    ///   - nextToken: The token that is required for pagination. On your first call to the ListMembers operation, set the value of this parameter to NULL. For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.
    ///   - onlyAssociated: Specifies which member accounts to include in the response based on their relationship status with the administrator account. The default value is TRUE. If OnlyAssociated is set to TRUE, the response includes member accounts whose relationship status with the administrator account is set to ENABLED. If OnlyAssociated is set to FALSE, the response includes all existing member accounts.
    ///   - logger: Logger use during operation
    @inlinable
    public func listMembers(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        onlyAssociated: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListMembersResponse {
        let input = ListMembersRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            onlyAssociated: onlyAssociated
        )
        return try await self.listMembers(input, logger: logger)
    }

    /// Lists the Security Hub administrator accounts. Can only be called by the organization management account.
    @Sendable
    @inlinable
    public func listOrganizationAdminAccounts(_ input: ListOrganizationAdminAccountsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListOrganizationAdminAccountsResponse {
        try await self.client.execute(
            operation: "ListOrganizationAdminAccounts", 
            path: "/organization/admin", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the Security Hub administrator accounts. Can only be called by the organization management account.
    ///
    /// Parameters:
    ///   - feature: The feature where the delegated administrator account is listed.  Defaults to Security Hub if not specified.
    ///   - maxResults: The maximum number of items to return in the response.
    ///   - nextToken: The token that is required for pagination. On your first call to the ListOrganizationAdminAccounts operation, set the value of this parameter to NULL. For subsequent calls to the operation, to continue listing data, set the value of this parameter to the value returned from the previous response.
    ///   - logger: Logger use during operation
    @inlinable
    public func listOrganizationAdminAccounts(
        feature: SecurityHubFeature? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListOrganizationAdminAccountsResponse {
        let input = ListOrganizationAdminAccountsRequest(
            feature: feature, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listOrganizationAdminAccounts(input, logger: logger)
    }

    ///  Lists all of the security controls that apply to a specified standard.
    @Sendable
    @inlinable
    public func listSecurityControlDefinitions(_ input: ListSecurityControlDefinitionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListSecurityControlDefinitionsResponse {
        try await self.client.execute(
            operation: "ListSecurityControlDefinitions", 
            path: "/securityControls/definitions", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Lists all of the security controls that apply to a specified standard.
    ///
    /// Parameters:
    ///   - maxResults:  An optional parameter that limits the total results of the API response to the specified number. If this parameter isn't provided in the request, the results include the first 25 security controls that apply to the specified standard. The results also include a NextToken parameter that you can use in a subsequent API call to get the next 25 controls. This repeats until all controls for the standard are returned.
    ///   - nextToken:  Optional pagination parameter.
    ///   - standardsArn:  The Amazon Resource Name (ARN) of the standard that you want to view controls for.
    ///   - logger: Logger use during operation
    @inlinable
    public func listSecurityControlDefinitions(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        standardsArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListSecurityControlDefinitionsResponse {
        let input = ListSecurityControlDefinitionsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            standardsArn: standardsArn
        )
        return try await self.listSecurityControlDefinitions(input, logger: logger)
    }

    ///  Specifies whether a control is currently enabled or disabled in each enabled standard in the calling account.  This operation omits standards control associations for standard subscriptions where StandardsControlsUpdatable has value NOT_READY_FOR_UPDATES.
    @Sendable
    @inlinable
    public func listStandardsControlAssociations(_ input: ListStandardsControlAssociationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListStandardsControlAssociationsResponse {
        try await self.client.execute(
            operation: "ListStandardsControlAssociations", 
            path: "/associations", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Specifies whether a control is currently enabled or disabled in each enabled standard in the calling account.  This operation omits standards control associations for standard subscriptions where StandardsControlsUpdatable has value NOT_READY_FOR_UPDATES.
    ///
    /// Parameters:
    ///   - maxResults:  An optional parameter that limits the total results of the API response to the specified number. If this parameter isn't provided in the request, the results include the first 25 standard and control associations. The results also include a NextToken parameter that you can use in a subsequent API call to get the next 25 associations. This repeats until all associations for the specified control are returned. The number of results is limited by the number of supported Security Hub standards that you've enabled in the calling account.
    ///   - nextToken:  Optional pagination parameter.
    ///   - securityControlId:  The identifier of the control (identified with SecurityControlId, SecurityControlArn, or a mix of both parameters) that you  want to determine the enablement status of in each enabled standard.
    ///   - logger: Logger use during operation
    @inlinable
    public func listStandardsControlAssociations(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        securityControlId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListStandardsControlAssociationsResponse {
        let input = ListStandardsControlAssociationsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            securityControlId: securityControlId
        )
        return try await self.listStandardsControlAssociations(input, logger: logger)
    }

    /// Returns a list of tags associated with a resource.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResponse {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/tags/{ResourceArn}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of tags associated with a resource.
    ///
    /// Parameters:
    ///   - resourceArn: The ARN of the resource to retrieve tags for.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResponse {
        let input = ListTagsForResourceRequest(
            resourceArn: resourceArn
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    ///  Associates a target account, organizational unit, or the root with a specified configuration. The target can be  associated with a configuration policy or self-managed behavior. Only the Security Hub delegated administrator can  invoke this operation from the home Region.
    @Sendable
    @inlinable
    public func startConfigurationPolicyAssociation(_ input: StartConfigurationPolicyAssociationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartConfigurationPolicyAssociationResponse {
        try await self.client.execute(
            operation: "StartConfigurationPolicyAssociation", 
            path: "/configurationPolicyAssociation/associate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Associates a target account, organizational unit, or the root with a specified configuration. The target can be  associated with a configuration policy or self-managed behavior. Only the Security Hub delegated administrator can  invoke this operation from the home Region.
    ///
    /// Parameters:
    ///   - configurationPolicyIdentifier:  The Amazon Resource Name (ARN) of a configuration policy, the universally unique identifier (UUID) of a  configuration policy, or a value of SELF_MANAGED_SECURITY_HUB for a self-managed configuration.
    ///   - target:  The identifier of the target account, organizational unit, or the root to associate with the specified configuration.
    ///   - logger: Logger use during operation
    @inlinable
    public func startConfigurationPolicyAssociation(
        configurationPolicyIdentifier: String? = nil,
        target: Target? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartConfigurationPolicyAssociationResponse {
        let input = StartConfigurationPolicyAssociationRequest(
            configurationPolicyIdentifier: configurationPolicyIdentifier, 
            target: target
        )
        return try await self.startConfigurationPolicyAssociation(input, logger: logger)
    }

    ///  Disassociates a target account, organizational unit, or the root from a specified configuration. When you  disassociate a configuration from its target, the target inherits the configuration of the closest parent. If there’s no  configuration to inherit, the target retains its settings but becomes a self-managed account. A target can be disassociated from  a configuration policy or self-managed behavior. Only the Security Hub delegated administrator can invoke this  operation from the home Region.
    @Sendable
    @inlinable
    public func startConfigurationPolicyDisassociation(_ input: StartConfigurationPolicyDisassociationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartConfigurationPolicyDisassociationResponse {
        try await self.client.execute(
            operation: "StartConfigurationPolicyDisassociation", 
            path: "/configurationPolicyAssociation/disassociate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Disassociates a target account, organizational unit, or the root from a specified configuration. When you  disassociate a configuration from its target, the target inherits the configuration of the closest parent. If there’s no  configuration to inherit, the target retains its settings but becomes a self-managed account. A target can be disassociated from  a configuration policy or self-managed behavior. Only the Security Hub delegated administrator can invoke this  operation from the home Region.
    ///
    /// Parameters:
    ///   - configurationPolicyIdentifier:  The Amazon Resource Name (ARN) of a configuration policy, the universally unique identifier (UUID) of a  configuration policy, or a value of SELF_MANAGED_SECURITY_HUB for a self-managed configuration.
    ///   - target:  The identifier of the target account, organizational unit, or the root to disassociate from the specified configuration.
    ///   - logger: Logger use during operation
    @inlinable
    public func startConfigurationPolicyDisassociation(
        configurationPolicyIdentifier: String? = nil,
        target: Target? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartConfigurationPolicyDisassociationResponse {
        let input = StartConfigurationPolicyDisassociationRequest(
            configurationPolicyIdentifier: configurationPolicyIdentifier, 
            target: target
        )
        return try await self.startConfigurationPolicyDisassociation(input, logger: logger)
    }

    /// Adds one or more tags to a resource.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResponse {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/tags/{ResourceArn}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds one or more tags to a resource.
    ///
    /// Parameters:
    ///   - resourceArn: The ARN of the resource to apply the tags to.
    ///   - tags: The tags to add to the resource. You can add up to 50 tags at a time. The tag keys can be no longer than 128 characters. The tag values can be no longer than 256 characters.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceArn: String,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResponse {
        let input = TagResourceRequest(
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Removes one or more tags from a resource.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResponse {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/tags/{ResourceArn}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes one or more tags from a resource.
    ///
    /// Parameters:
    ///   - resourceArn: The ARN of the resource to remove the tags from.
    ///   - tagKeys: The tag keys associated with the tags to remove from the resource. You can remove up to 50 tags at a time.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceArn: String,
        tagKeys: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResponse {
        let input = UntagResourceRequest(
            resourceArn: resourceArn, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Updates the name and description of a custom action target in Security Hub.
    @Sendable
    @inlinable
    public func updateActionTarget(_ input: UpdateActionTargetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateActionTargetResponse {
        try await self.client.execute(
            operation: "UpdateActionTarget", 
            path: "/actionTargets/{ActionTargetArn+}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the name and description of a custom action target in Security Hub.
    ///
    /// Parameters:
    ///   - actionTargetArn: The ARN of the custom action target to update.
    ///   - description: The updated description for the custom action target.
    ///   - name: The updated name of the custom action target.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateActionTarget(
        actionTargetArn: String,
        description: String? = nil,
        name: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateActionTargetResponse {
        let input = UpdateActionTargetRequest(
            actionTargetArn: actionTargetArn, 
            description: description, 
            name: name
        )
        return try await self.updateActionTarget(input, logger: logger)
    }

    /// Udpates the configuration for the Aggregator V2. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func updateAggregatorV2(_ input: UpdateAggregatorV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateAggregatorV2Response {
        try await self.client.execute(
            operation: "UpdateAggregatorV2", 
            path: "/aggregatorv2/update/{AggregatorV2Arn+}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Udpates the configuration for the Aggregator V2. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - aggregatorV2Arn: The ARN of the Aggregator V2.
    ///   - linkedRegions: A list of Amazon Web Services Regions linked to the aggegation Region.
    ///   - regionLinkingMode: Determines how Amazon Web Services Regions should be linked to the Aggregator V2.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateAggregatorV2(
        aggregatorV2Arn: String,
        linkedRegions: [String]? = nil,
        regionLinkingMode: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateAggregatorV2Response {
        let input = UpdateAggregatorV2Request(
            aggregatorV2Arn: aggregatorV2Arn, 
            linkedRegions: linkedRegions, 
            regionLinkingMode: regionLinkingMode
        )
        return try await self.updateAggregatorV2(input, logger: logger)
    }

    /// Updates a V2 automation rule. This API is in private preview and subject to change.
    @Sendable
    @inlinable
    public func updateAutomationRuleV2(_ input: UpdateAutomationRuleV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateAutomationRuleV2Response {
        try await self.client.execute(
            operation: "UpdateAutomationRuleV2", 
            path: "/automationrulesv2/{Identifier}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a V2 automation rule. This API is in private preview and subject to change.
    ///
    /// Parameters:
    ///   - actions: A list of actions to be performed when the rule criteria is met.
    ///   - criteria: The filtering type and configuration of the automation rule.
    ///   - description: A description of the automation rule.
    ///   - identifier: The ARN of the automation rule.
    ///   - ruleName: The name of the automation rule.
    ///   - ruleOrder: Represents a value for the rule priority.
    ///   - ruleStatus: The status of the automation rule.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateAutomationRuleV2(
        actions: [AutomationRulesActionV2]? = nil,
        criteria: Criteria? = nil,
        description: String? = nil,
        identifier: String,
        ruleName: String? = nil,
        ruleOrder: Float? = nil,
        ruleStatus: RuleStatusV2? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateAutomationRuleV2Response {
        let input = UpdateAutomationRuleV2Request(
            actions: actions, 
            criteria: criteria, 
            description: description, 
            identifier: identifier, 
            ruleName: ruleName, 
            ruleOrder: ruleOrder, 
            ruleStatus: ruleStatus
        )
        return try await self.updateAutomationRuleV2(input, logger: logger)
    }

    ///  Updates a configuration policy. Only the Security Hub delegated  administrator can invoke this operation from the home Region.
    @Sendable
    @inlinable
    public func updateConfigurationPolicy(_ input: UpdateConfigurationPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateConfigurationPolicyResponse {
        try await self.client.execute(
            operation: "UpdateConfigurationPolicy", 
            path: "/configurationPolicy/{Identifier}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Updates a configuration policy. Only the Security Hub delegated  administrator can invoke this operation from the home Region.
    ///
    /// Parameters:
    ///   - configurationPolicy:  An object that defines how Security Hub is configured. It includes whether Security Hub is enabled or  disabled, a list of enabled security standards, a list of enabled or disabled security controls, and a list of custom parameter values for specified controls.  If you provide a list of security controls that are enabled in the configuration policy, Security Hub disables all other controls (including newly  released controls). If you provide a list of security controls that are disabled in the configuration policy, Security Hub  enables all other controls (including newly released controls).  When updating a configuration policy, provide a complete list of standards that you want to enable and a complete list  of controls that you want to enable or disable. The updated configuration replaces the current configuration.
    ///   - description:  The description of the configuration policy.
    ///   - identifier:  The Amazon Resource Name (ARN) or universally unique identifier (UUID) of the configuration policy.
    ///   - name:  The name of the configuration policy. Alphanumeric characters and the following ASCII characters are permitted:  -, ., !, *, /.
    ///   - updatedReason:  The reason for updating the configuration policy.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateConfigurationPolicy(
        configurationPolicy: Policy? = nil,
        description: String? = nil,
        identifier: String,
        name: String? = nil,
        updatedReason: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateConfigurationPolicyResponse {
        let input = UpdateConfigurationPolicyRequest(
            configurationPolicy: configurationPolicy, 
            description: description, 
            identifier: identifier, 
            name: name, 
            updatedReason: updatedReason
        )
        return try await self.updateConfigurationPolicy(input, logger: logger)
    }

    /// Grants permission to update a connectorV2 based on its id and input parameters. This API is in preview release and subject to change.
    @Sendable
    @inlinable
    public func updateConnectorV2(_ input: UpdateConnectorV2Request, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateConnectorV2Response {
        try await self.client.execute(
            operation: "UpdateConnectorV2", 
            path: "/connectorsv2/{ConnectorId+}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Grants permission to update a connectorV2 based on its id and input parameters. This API is in preview release and subject to change.
    ///
    /// Parameters:
    ///   - clientSecret: The clientSecret of ServiceNow.
    ///   - connectorId: The UUID of the connectorV2 to identify connectorV2 resource.
    ///   - description: The description of the connectorV2.
    ///   - provider: The third-party provider’s service configuration.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateConnectorV2(
        clientSecret: String? = nil,
        connectorId: String,
        description: String? = nil,
        provider: ProviderUpdateConfiguration? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateConnectorV2Response {
        let input = UpdateConnectorV2Request(
            clientSecret: clientSecret, 
            connectorId: connectorId, 
            description: description, 
            provider: provider
        )
        return try await self.updateConnectorV2(input, logger: logger)
    }

    ///  The aggregation Region is now called the home Region.  Updates cross-Region aggregation settings. You can use this operation to update the Region linking mode and the list  of included or excluded Amazon Web Services Regions. However, you can't use this operation to change the home Region. You can invoke this operation from the current home Region only.
    @Sendable
    @inlinable
    public func updateFindingAggregator(_ input: UpdateFindingAggregatorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateFindingAggregatorResponse {
        try await self.client.execute(
            operation: "UpdateFindingAggregator", 
            path: "/findingAggregator/update", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  The aggregation Region is now called the home Region.  Updates cross-Region aggregation settings. You can use this operation to update the Region linking mode and the list  of included or excluded Amazon Web Services Regions. However, you can't use this operation to change the home Region. You can invoke this operation from the current home Region only.
    ///
    /// Parameters:
    ///   - findingAggregatorArn: The ARN of the finding aggregator. To obtain the ARN, use ListFindingAggregators.
    ///   - regionLinkingMode: Indicates whether to aggregate findings from all of the available Regions in the current partition. Also determines whether to automatically aggregate findings from new Regions as Security Hub supports them and you opt into them. The selected option also determines how to use the Regions provided in the Regions list. The options are as follows:    ALL_REGIONS - Aggregates findings from all of the Regions where Security Hub is enabled. When you choose this option, Security Hub also automatically aggregates findings from new Regions as Security Hub supports them and you opt into them.     ALL_REGIONS_EXCEPT_SPECIFIED - Aggregates findings from all of the Regions where Security Hub is enabled, except for the Regions listed in the Regions parameter. When you choose this option, Security Hub also automatically aggregates findings from new Regions as Security Hub supports them and you opt into them.     SPECIFIED_REGIONS - Aggregates findings only from the Regions listed in the Regions parameter. Security Hub does not automatically aggregate findings from new Regions.     NO_REGIONS - Aggregates no data because no Regions are selected as linked Regions.
    ///   - regions: If RegionLinkingMode is ALL_REGIONS_EXCEPT_SPECIFIED, then this is a space-separated list of Regions that don't replicate and send findings to the home Region. If RegionLinkingMode is SPECIFIED_REGIONS, then this is a space-separated list of Regions that do replicate and send findings to the home Region. An InvalidInputException error results if you populate this field while RegionLinkingMode is  NO_REGIONS.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateFindingAggregator(
        findingAggregatorArn: String? = nil,
        regionLinkingMode: String? = nil,
        regions: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateFindingAggregatorResponse {
        let input = UpdateFindingAggregatorRequest(
            findingAggregatorArn: findingAggregatorArn, 
            regionLinkingMode: regionLinkingMode, 
            regions: regions
        )
        return try await self.updateFindingAggregator(input, logger: logger)
    }

    ///  UpdateFindings is a deprecated operation. Instead of UpdateFindings, use the BatchUpdateFindings operation. The UpdateFindings operation updates the Note and RecordState of the Security Hub aggregated findings that the filter attributes specify. Any member account that can view the finding can also see the update to the finding. Finding updates made with UpdateFindings aren't persisted if the same finding is later updated by the  finding provider through the BatchImportFindings operation. In addition, Security Hub doesn't  record updates made with UpdateFindings in the finding history.
    @Sendable
    @inlinable
    public func updateFindings(_ input: UpdateFindingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateFindingsResponse {
        try await self.client.execute(
            operation: "UpdateFindings", 
            path: "/findings", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  UpdateFindings is a deprecated operation. Instead of UpdateFindings, use the BatchUpdateFindings operation. The UpdateFindings operation updates the Note and RecordState of the Security Hub aggregated findings that the filter attributes specify. Any member account that can view the finding can also see the update to the finding. Finding updates made with UpdateFindings aren't persisted if the same finding is later updated by the  finding provider through the BatchImportFindings operation. In addition, Security Hub doesn't  record updates made with UpdateFindings in the finding history.
    ///
    /// Parameters:
    ///   - filters: A collection of attributes that specify which findings you want to update.
    ///   - note: The updated note for the finding.
    ///   - recordState: The updated record state for the finding.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateFindings(
        filters: AwsSecurityFindingFilters? = nil,
        note: NoteUpdate? = nil,
        recordState: RecordState? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateFindingsResponse {
        let input = UpdateFindingsRequest(
            filters: filters, 
            note: note, 
            recordState: recordState
        )
        return try await self.updateFindings(input, logger: logger)
    }

    /// Updates the Security Hub insight identified by the specified insight ARN.
    @Sendable
    @inlinable
    public func updateInsight(_ input: UpdateInsightRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateInsightResponse {
        try await self.client.execute(
            operation: "UpdateInsight", 
            path: "/insights/{InsightArn+}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the Security Hub insight identified by the specified insight ARN.
    ///
    /// Parameters:
    ///   - filters: The updated filters that define this insight.
    ///   - groupByAttribute: The updated GroupBy attribute that defines this insight.
    ///   - insightArn: The ARN of the insight that you want to update.
    ///   - name: The updated name for the insight.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateInsight(
        filters: AwsSecurityFindingFilters? = nil,
        groupByAttribute: String? = nil,
        insightArn: String,
        name: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateInsightResponse {
        let input = UpdateInsightRequest(
            filters: filters, 
            groupByAttribute: groupByAttribute, 
            insightArn: insightArn, 
            name: name
        )
        return try await self.updateInsight(input, logger: logger)
    }

    /// Updates the configuration of your organization in Security Hub. Only the Security Hub administrator account can invoke this operation.
    @Sendable
    @inlinable
    public func updateOrganizationConfiguration(_ input: UpdateOrganizationConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateOrganizationConfigurationResponse {
        try await self.client.execute(
            operation: "UpdateOrganizationConfiguration", 
            path: "/organization/configuration", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the configuration of your organization in Security Hub. Only the Security Hub administrator account can invoke this operation.
    ///
    /// Parameters:
    ///   - autoEnable: Whether to automatically enable Security Hub in new member accounts when they join the organization. If set to true, then Security Hub is automatically enabled in new accounts. If set to false, then Security Hub isn't enabled in new accounts automatically. The default value is false. If the ConfigurationType of your organization is set to CENTRAL, then this field is set  to false and can't be changed in the home Region and linked Regions. However, in that case, the delegated administrator can create a configuration  policy in which Security Hub is enabled and associate the policy with new organization accounts.
    ///   - autoEnableStandards: Whether to automatically enable Security Hub default standards  in new member accounts when they join the organization. The default value of this parameter is equal to DEFAULT. If equal to DEFAULT, then Security Hub default standards are automatically enabled for new member  accounts. If equal to NONE, then default standards are not automatically enabled for new member  accounts. If the ConfigurationType of your organization is set to CENTRAL, then this field is set  to NONE and can't be changed in the home Region and linked Regions. However, in that case, the delegated administrator can create a configuration  policy in which specific security standards are enabled and associate the policy with new organization accounts.
    ///   - organizationConfiguration: 
    ///   - logger: Logger use during operation
    @inlinable
    public func updateOrganizationConfiguration(
        autoEnable: Bool? = nil,
        autoEnableStandards: AutoEnableStandards? = nil,
        organizationConfiguration: OrganizationConfiguration? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateOrganizationConfigurationResponse {
        let input = UpdateOrganizationConfigurationRequest(
            autoEnable: autoEnable, 
            autoEnableStandards: autoEnableStandards, 
            organizationConfiguration: organizationConfiguration
        )
        return try await self.updateOrganizationConfiguration(input, logger: logger)
    }

    ///  Updates the properties of a security control.
    @Sendable
    @inlinable
    public func updateSecurityControl(_ input: UpdateSecurityControlRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateSecurityControlResponse {
        try await self.client.execute(
            operation: "UpdateSecurityControl", 
            path: "/securityControl/update", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Updates the properties of a security control.
    ///
    /// Parameters:
    ///   - lastUpdateReason:  The most recent reason for updating the properties of the security control. This field accepts alphanumeric
    ///   - parameters:  An object that specifies which security control parameters to update.
    ///   - securityControlId:  The Amazon Resource Name (ARN) or ID of the control to update.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateSecurityControl(
        lastUpdateReason: String? = nil,
        parameters: [String: ParameterConfiguration]? = nil,
        securityControlId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateSecurityControlResponse {
        let input = UpdateSecurityControlRequest(
            lastUpdateReason: lastUpdateReason, 
            parameters: parameters, 
            securityControlId: securityControlId
        )
        return try await self.updateSecurityControl(input, logger: logger)
    }

    /// Updates configuration options for Security Hub.
    @Sendable
    @inlinable
    public func updateSecurityHubConfiguration(_ input: UpdateSecurityHubConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateSecurityHubConfigurationResponse {
        try await self.client.execute(
            operation: "UpdateSecurityHubConfiguration", 
            path: "/accounts", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates configuration options for Security Hub.
    ///
    /// Parameters:
    ///   - autoEnableControls: Whether to automatically enable new controls when they are added to standards that are enabled. By default, this is set to true, and new controls are enabled automatically. To not automatically enable new controls, set this to false.  When you automatically enable new controls, you can interact with the controls in  the console and programmatically immediately after release. However, automatically enabled controls have a temporary default status of  DISABLED. It can take up to several days for Security Hub to process the control release and designate the  control as ENABLED in your account. During the processing period, you can manually enable or disable a  control, and Security Hub will maintain that designation regardless of whether you have AutoEnableControls set to  true.
    ///   - controlFindingGenerator: Updates whether the calling account has consolidated control findings turned on.  If the value for this field is set to  SECURITY_CONTROL, Security Hub generates a single finding for a control check even when the check  applies to multiple enabled standards. If the value for this field is set to STANDARD_CONTROL, Security Hub generates separate findings  for a control check when the check applies to multiple enabled standards. For accounts that are part of an organization, this value can only be updated in the administrator account.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateSecurityHubConfiguration(
        autoEnableControls: Bool? = nil,
        controlFindingGenerator: ControlFindingGenerator? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateSecurityHubConfigurationResponse {
        let input = UpdateSecurityHubConfigurationRequest(
            autoEnableControls: autoEnableControls, 
            controlFindingGenerator: controlFindingGenerator
        )
        return try await self.updateSecurityHubConfiguration(input, logger: logger)
    }

    /// Used to control whether an individual security standard control is enabled or disabled. Calls to this operation return a RESOURCE_NOT_FOUND_EXCEPTION error when the standard subscription for the control has StandardsControlsUpdatable value NOT_READY_FOR_UPDATES.
    @Sendable
    @inlinable
    public func updateStandardsControl(_ input: UpdateStandardsControlRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateStandardsControlResponse {
        try await self.client.execute(
            operation: "UpdateStandardsControl", 
            path: "/standards/control/{StandardsControlArn+}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Used to control whether an individual security standard control is enabled or disabled. Calls to this operation return a RESOURCE_NOT_FOUND_EXCEPTION error when the standard subscription for the control has StandardsControlsUpdatable value NOT_READY_FOR_UPDATES.
    ///
    /// Parameters:
    ///   - controlStatus: The updated status of the security standard control.
    ///   - disabledReason: A description of the reason why you are disabling a security standard control. If you are disabling a control, then this is required.
    ///   - standardsControlArn: The ARN of the security standard control to enable or disable.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateStandardsControl(
        controlStatus: ControlStatus? = nil,
        disabledReason: String? = nil,
        standardsControlArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateStandardsControlResponse {
        let input = UpdateStandardsControlRequest(
            controlStatus: controlStatus, 
            disabledReason: disabledReason, 
            standardsControlArn: standardsControlArn
        )
        return try await self.updateStandardsControl(input, logger: logger)
    }
}

extension SecurityHub {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: SecurityHub, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension SecurityHub {
    /// Return PaginatorSequence for operation ``describeActionTargets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeActionTargetsPaginator(
        _ input: DescribeActionTargetsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeActionTargetsRequest, DescribeActionTargetsResponse> {
        return .init(
            input: input,
            command: self.describeActionTargets,
            inputKey: \DescribeActionTargetsRequest.nextToken,
            outputKey: \DescribeActionTargetsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeActionTargets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - actionTargetArns: A list of custom action target ARNs for the custom action targets to retrieve.
    ///   - maxResults: The maximum number of results to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeActionTargetsPaginator(
        actionTargetArns: [String]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeActionTargetsRequest, DescribeActionTargetsResponse> {
        let input = DescribeActionTargetsRequest(
            actionTargetArns: actionTargetArns, 
            maxResults: maxResults
        )
        return self.describeActionTargetsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeProducts(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeProductsPaginator(
        _ input: DescribeProductsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeProductsRequest, DescribeProductsResponse> {
        return .init(
            input: input,
            command: self.describeProducts,
            inputKey: \DescribeProductsRequest.nextToken,
            outputKey: \DescribeProductsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeProducts(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return.
    ///   - productArn: The ARN of the integration to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeProductsPaginator(
        maxResults: Int? = nil,
        productArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeProductsRequest, DescribeProductsResponse> {
        let input = DescribeProductsRequest(
            maxResults: maxResults, 
            productArn: productArn
        )
        return self.describeProductsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeProductsV2(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeProductsV2Paginator(
        _ input: DescribeProductsV2Request,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeProductsV2Request, DescribeProductsV2Response> {
        return .init(
            input: input,
            command: self.describeProductsV2,
            inputKey: \DescribeProductsV2Request.nextToken,
            outputKey: \DescribeProductsV2Response.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeProductsV2(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeProductsV2Paginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeProductsV2Request, DescribeProductsV2Response> {
        let input = DescribeProductsV2Request(
            maxResults: maxResults
        )
        return self.describeProductsV2Paginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeStandards(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeStandardsPaginator(
        _ input: DescribeStandardsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeStandardsRequest, DescribeStandardsResponse> {
        return .init(
            input: input,
            command: self.describeStandards,
            inputKey: \DescribeStandardsRequest.nextToken,
            outputKey: \DescribeStandardsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeStandards(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of standards to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeStandardsPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeStandardsRequest, DescribeStandardsResponse> {
        let input = DescribeStandardsRequest(
            maxResults: maxResults
        )
        return self.describeStandardsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeStandardsControls(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeStandardsControlsPaginator(
        _ input: DescribeStandardsControlsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeStandardsControlsRequest, DescribeStandardsControlsResponse> {
        return .init(
            input: input,
            command: self.describeStandardsControls,
            inputKey: \DescribeStandardsControlsRequest.nextToken,
            outputKey: \DescribeStandardsControlsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeStandardsControls(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of security standard controls to return.
    ///   - standardsSubscriptionArn: The ARN of a resource that represents your subscription to a supported standard. To get the subscription ARNs of the standards you have enabled, use the GetEnabledStandards operation.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeStandardsControlsPaginator(
        maxResults: Int? = nil,
        standardsSubscriptionArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeStandardsControlsRequest, DescribeStandardsControlsResponse> {
        let input = DescribeStandardsControlsRequest(
            maxResults: maxResults, 
            standardsSubscriptionArn: standardsSubscriptionArn
        )
        return self.describeStandardsControlsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getEnabledStandards(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getEnabledStandardsPaginator(
        _ input: GetEnabledStandardsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetEnabledStandardsRequest, GetEnabledStandardsResponse> {
        return .init(
            input: input,
            command: self.getEnabledStandards,
            inputKey: \GetEnabledStandardsRequest.nextToken,
            outputKey: \GetEnabledStandardsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getEnabledStandards(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return in the response.
    ///   - standardsSubscriptionArns: The list of the standards subscription ARNs for the standards to retrieve.
    ///   - logger: Logger used for logging
    @inlinable
    public func getEnabledStandardsPaginator(
        maxResults: Int? = nil,
        standardsSubscriptionArns: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetEnabledStandardsRequest, GetEnabledStandardsResponse> {
        let input = GetEnabledStandardsRequest(
            maxResults: maxResults, 
            standardsSubscriptionArns: standardsSubscriptionArns
        )
        return self.getEnabledStandardsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getFindingHistory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getFindingHistoryPaginator(
        _ input: GetFindingHistoryRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetFindingHistoryRequest, GetFindingHistoryResponse> {
        return .init(
            input: input,
            command: self.getFindingHistory,
            inputKey: \GetFindingHistoryRequest.nextToken,
            outputKey: \GetFindingHistoryResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getFindingHistory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - endTime:  An ISO 8601-formatted timestamp that indicates the end time of the requested finding history. If you provide values for both StartTime and EndTime, Security Hub returns finding history for the specified time period. If you provide a value for StartTime but not for EndTime, Security Hub returns finding history from the StartTime to the time at which the API is called. If you provide a value for EndTime but not for StartTime, Security Hub returns finding history from the CreatedAt timestamp of the finding to the EndTime. If you provide neither StartTime nor EndTime, Security Hub returns finding history from the CreatedAt timestamp of the finding to the time at which the API is called. In all of these scenarios, the response is limited to 100 results. For more information about the validation and formatting of timestamp fields in Security Hub, see Timestamps.
    ///   - findingIdentifier: 
    ///   - maxResults:  The maximum number of results to be returned. If you don’t provide it, Security Hub returns up to 100 results of finding history.
    ///   - startTime: A timestamp that indicates the start time of the requested finding history. If you provide values for both StartTime and EndTime, Security Hub returns finding history for the specified time period. If you provide a value for StartTime but not for EndTime, Security Hub returns finding history from the StartTime to the time at which the API is called. If you provide a value for EndTime but not for StartTime, Security Hub returns finding history from the CreatedAt timestamp of the finding to the EndTime. If you provide neither StartTime nor EndTime, Security Hub returns finding history from the CreatedAt timestamp of the finding to the time at which the API is called. In all of these scenarios, the response is limited to 100 results. For more information about the validation and formatting of timestamp fields in Security Hub, see Timestamps.
    ///   - logger: Logger used for logging
    @inlinable
    public func getFindingHistoryPaginator(
        endTime: Date? = nil,
        findingIdentifier: AwsSecurityFindingIdentifier? = nil,
        maxResults: Int? = nil,
        startTime: Date? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetFindingHistoryRequest, GetFindingHistoryResponse> {
        let input = GetFindingHistoryRequest(
            endTime: endTime, 
            findingIdentifier: findingIdentifier, 
            maxResults: maxResults, 
            startTime: startTime
        )
        return self.getFindingHistoryPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getFindings(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getFindingsPaginator(
        _ input: GetFindingsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetFindingsRequest, GetFindingsResponse> {
        return .init(
            input: input,
            command: self.getFindings,
            inputKey: \GetFindingsRequest.nextToken,
            outputKey: \GetFindingsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getFindings(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: The finding attributes used to define a condition to filter the returned findings. You can filter by up to 10 finding attributes. For each attribute, you can provide up to 20 filter values. Note that in the available filter fields, WorkflowState is deprecated. To search for a finding based on its workflow status, use WorkflowStatus.
    ///   - maxResults: The maximum number of findings to return.
    ///   - sortCriteria: The finding attributes used to sort the list of returned findings.
    ///   - logger: Logger used for logging
    @inlinable
    public func getFindingsPaginator(
        filters: AwsSecurityFindingFilters? = nil,
        maxResults: Int? = nil,
        sortCriteria: [SortCriterion]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetFindingsRequest, GetFindingsResponse> {
        let input = GetFindingsRequest(
            filters: filters, 
            maxResults: maxResults, 
            sortCriteria: sortCriteria
        )
        return self.getFindingsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getFindingsV2(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getFindingsV2Paginator(
        _ input: GetFindingsV2Request,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetFindingsV2Request, GetFindingsV2Response> {
        return .init(
            input: input,
            command: self.getFindingsV2,
            inputKey: \GetFindingsV2Request.nextToken,
            outputKey: \GetFindingsV2Response.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getFindingsV2(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: The finding attributes used to define a condition to filter the returned OCSF findings.  You can filter up to 10 composite filters.  For each filter type inside of a composite filter, you can provide up to 20 filters.
    ///   - maxResults: The maximum number of results to return.
    ///   - sortCriteria: The finding attributes used to sort the list of returned findings.
    ///   - logger: Logger used for logging
    @inlinable
    public func getFindingsV2Paginator(
        filters: OcsfFindingFilters? = nil,
        maxResults: Int? = nil,
        sortCriteria: [SortCriterion]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetFindingsV2Request, GetFindingsV2Response> {
        let input = GetFindingsV2Request(
            filters: filters, 
            maxResults: maxResults, 
            sortCriteria: sortCriteria
        )
        return self.getFindingsV2Paginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getInsights(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getInsightsPaginator(
        _ input: GetInsightsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetInsightsRequest, GetInsightsResponse> {
        return .init(
            input: input,
            command: self.getInsights,
            inputKey: \GetInsightsRequest.nextToken,
            outputKey: \GetInsightsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getInsights(_:logger:)``.
    ///
    /// - Parameters:
    ///   - insightArns: The ARNs of the insights to describe. If you don't provide any insight ARNs, then GetInsights returns all of your custom insights. It does not return any managed insights.
    ///   - maxResults: The maximum number of items to return in the response.
    ///   - logger: Logger used for logging
    @inlinable
    public func getInsightsPaginator(
        insightArns: [String]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetInsightsRequest, GetInsightsResponse> {
        let input = GetInsightsRequest(
            insightArns: insightArns, 
            maxResults: maxResults
        )
        return self.getInsightsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getResourcesV2(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getResourcesV2Paginator(
        _ input: GetResourcesV2Request,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetResourcesV2Request, GetResourcesV2Response> {
        return .init(
            input: input,
            command: self.getResourcesV2,
            inputKey: \GetResourcesV2Request.nextToken,
            outputKey: \GetResourcesV2Response.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getResourcesV2(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Filters resources based on a set of criteria.
    ///   - maxResults: The maximum number of results to return.
    ///   - sortCriteria: The finding attributes used to sort the list of returned findings.
    ///   - logger: Logger used for logging
    @inlinable
    public func getResourcesV2Paginator(
        filters: ResourcesFilters? = nil,
        maxResults: Int? = nil,
        sortCriteria: [SortCriterion]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetResourcesV2Request, GetResourcesV2Response> {
        let input = GetResourcesV2Request(
            filters: filters, 
            maxResults: maxResults, 
            sortCriteria: sortCriteria
        )
        return self.getResourcesV2Paginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAggregatorsV2(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAggregatorsV2Paginator(
        _ input: ListAggregatorsV2Request,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAggregatorsV2Request, ListAggregatorsV2Response> {
        return .init(
            input: input,
            command: self.listAggregatorsV2,
            inputKey: \ListAggregatorsV2Request.nextToken,
            outputKey: \ListAggregatorsV2Response.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAggregatorsV2(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAggregatorsV2Paginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAggregatorsV2Request, ListAggregatorsV2Response> {
        let input = ListAggregatorsV2Request(
            maxResults: maxResults
        )
        return self.listAggregatorsV2Paginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listConfigurationPolicies(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listConfigurationPoliciesPaginator(
        _ input: ListConfigurationPoliciesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListConfigurationPoliciesRequest, ListConfigurationPoliciesResponse> {
        return .init(
            input: input,
            command: self.listConfigurationPolicies,
            inputKey: \ListConfigurationPoliciesRequest.nextToken,
            outputKey: \ListConfigurationPoliciesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listConfigurationPolicies(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults:  The maximum number of results that's returned by ListConfigurationPolicies in each page of the response.  When this parameter is used, ListConfigurationPolicies returns the specified number of results in a  single page and a NextToken response element. You can see the remaining results of the initial request  by sending another ListConfigurationPolicies request with the returned NextToken value. A  valid range for MaxResults is between 1 and 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listConfigurationPoliciesPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListConfigurationPoliciesRequest, ListConfigurationPoliciesResponse> {
        let input = ListConfigurationPoliciesRequest(
            maxResults: maxResults
        )
        return self.listConfigurationPoliciesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listConfigurationPolicyAssociations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listConfigurationPolicyAssociationsPaginator(
        _ input: ListConfigurationPolicyAssociationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListConfigurationPolicyAssociationsRequest, ListConfigurationPolicyAssociationsResponse> {
        return .init(
            input: input,
            command: self.listConfigurationPolicyAssociations,
            inputKey: \ListConfigurationPolicyAssociationsRequest.nextToken,
            outputKey: \ListConfigurationPolicyAssociationsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listConfigurationPolicyAssociations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters:  Options for filtering the ListConfigurationPolicyAssociations response. You can filter by the Amazon Resource Name (ARN) or  universally unique identifier (UUID) of a configuration, AssociationType, or AssociationStatus.
    ///   - maxResults:  The maximum number of results that's returned by ListConfigurationPolicies in each page of the response.  When this parameter is used, ListConfigurationPolicyAssociations returns the specified number of results  in a single page and a NextToken response element. You can see the remaining results of the initial  request by sending another ListConfigurationPolicyAssociations request with the returned NextToken  value. A valid range for MaxResults is between 1 and 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listConfigurationPolicyAssociationsPaginator(
        filters: AssociationFilters? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListConfigurationPolicyAssociationsRequest, ListConfigurationPolicyAssociationsResponse> {
        let input = ListConfigurationPolicyAssociationsRequest(
            filters: filters, 
            maxResults: maxResults
        )
        return self.listConfigurationPolicyAssociationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listEnabledProductsForImport(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listEnabledProductsForImportPaginator(
        _ input: ListEnabledProductsForImportRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListEnabledProductsForImportRequest, ListEnabledProductsForImportResponse> {
        return .init(
            input: input,
            command: self.listEnabledProductsForImport,
            inputKey: \ListEnabledProductsForImportRequest.nextToken,
            outputKey: \ListEnabledProductsForImportResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listEnabledProductsForImport(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to return in the response.
    ///   - logger: Logger used for logging
    @inlinable
    public func listEnabledProductsForImportPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListEnabledProductsForImportRequest, ListEnabledProductsForImportResponse> {
        let input = ListEnabledProductsForImportRequest(
            maxResults: maxResults
        )
        return self.listEnabledProductsForImportPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listFindingAggregators(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listFindingAggregatorsPaginator(
        _ input: ListFindingAggregatorsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListFindingAggregatorsRequest, ListFindingAggregatorsResponse> {
        return .init(
            input: input,
            command: self.listFindingAggregators,
            inputKey: \ListFindingAggregatorsRequest.nextToken,
            outputKey: \ListFindingAggregatorsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listFindingAggregators(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return. This operation currently only returns a single result.
    ///   - logger: Logger used for logging
    @inlinable
    public func listFindingAggregatorsPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListFindingAggregatorsRequest, ListFindingAggregatorsResponse> {
        let input = ListFindingAggregatorsRequest(
            maxResults: maxResults
        )
        return self.listFindingAggregatorsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listInvitations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listInvitationsPaginator(
        _ input: ListInvitationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListInvitationsRequest, ListInvitationsResponse> {
        return .init(
            input: input,
            command: self.listInvitations,
            inputKey: \ListInvitationsRequest.nextToken,
            outputKey: \ListInvitationsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listInvitations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to return in the response.
    ///   - logger: Logger used for logging
    @inlinable
    public func listInvitationsPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListInvitationsRequest, ListInvitationsResponse> {
        let input = ListInvitationsRequest(
            maxResults: maxResults
        )
        return self.listInvitationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listMembers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listMembersPaginator(
        _ input: ListMembersRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListMembersRequest, ListMembersResponse> {
        return .init(
            input: input,
            command: self.listMembers,
            inputKey: \ListMembersRequest.nextToken,
            outputKey: \ListMembersResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listMembers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to return in the response.
    ///   - onlyAssociated: Specifies which member accounts to include in the response based on their relationship status with the administrator account. The default value is TRUE. If OnlyAssociated is set to TRUE, the response includes member accounts whose relationship status with the administrator account is set to ENABLED. If OnlyAssociated is set to FALSE, the response includes all existing member accounts.
    ///   - logger: Logger used for logging
    @inlinable
    public func listMembersPaginator(
        maxResults: Int? = nil,
        onlyAssociated: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListMembersRequest, ListMembersResponse> {
        let input = ListMembersRequest(
            maxResults: maxResults, 
            onlyAssociated: onlyAssociated
        )
        return self.listMembersPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listOrganizationAdminAccounts(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listOrganizationAdminAccountsPaginator(
        _ input: ListOrganizationAdminAccountsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListOrganizationAdminAccountsRequest, ListOrganizationAdminAccountsResponse> {
        return .init(
            input: input,
            command: self.listOrganizationAdminAccounts,
            inputKey: \ListOrganizationAdminAccountsRequest.nextToken,
            outputKey: \ListOrganizationAdminAccountsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listOrganizationAdminAccounts(_:logger:)``.
    ///
    /// - Parameters:
    ///   - feature: The feature where the delegated administrator account is listed.  Defaults to Security Hub if not specified.
    ///   - maxResults: The maximum number of items to return in the response.
    ///   - logger: Logger used for logging
    @inlinable
    public func listOrganizationAdminAccountsPaginator(
        feature: SecurityHubFeature? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListOrganizationAdminAccountsRequest, ListOrganizationAdminAccountsResponse> {
        let input = ListOrganizationAdminAccountsRequest(
            feature: feature, 
            maxResults: maxResults
        )
        return self.listOrganizationAdminAccountsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listSecurityControlDefinitions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listSecurityControlDefinitionsPaginator(
        _ input: ListSecurityControlDefinitionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListSecurityControlDefinitionsRequest, ListSecurityControlDefinitionsResponse> {
        return .init(
            input: input,
            command: self.listSecurityControlDefinitions,
            inputKey: \ListSecurityControlDefinitionsRequest.nextToken,
            outputKey: \ListSecurityControlDefinitionsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listSecurityControlDefinitions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults:  An optional parameter that limits the total results of the API response to the specified number. If this parameter isn't provided in the request, the results include the first 25 security controls that apply to the specified standard. The results also include a NextToken parameter that you can use in a subsequent API call to get the next 25 controls. This repeats until all controls for the standard are returned.
    ///   - standardsArn:  The Amazon Resource Name (ARN) of the standard that you want to view controls for.
    ///   - logger: Logger used for logging
    @inlinable
    public func listSecurityControlDefinitionsPaginator(
        maxResults: Int? = nil,
        standardsArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListSecurityControlDefinitionsRequest, ListSecurityControlDefinitionsResponse> {
        let input = ListSecurityControlDefinitionsRequest(
            maxResults: maxResults, 
            standardsArn: standardsArn
        )
        return self.listSecurityControlDefinitionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listStandardsControlAssociations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listStandardsControlAssociationsPaginator(
        _ input: ListStandardsControlAssociationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListStandardsControlAssociationsRequest, ListStandardsControlAssociationsResponse> {
        return .init(
            input: input,
            command: self.listStandardsControlAssociations,
            inputKey: \ListStandardsControlAssociationsRequest.nextToken,
            outputKey: \ListStandardsControlAssociationsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listStandardsControlAssociations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults:  An optional parameter that limits the total results of the API response to the specified number. If this parameter isn't provided in the request, the results include the first 25 standard and control associations. The results also include a NextToken parameter that you can use in a subsequent API call to get the next 25 associations. This repeats until all associations for the specified control are returned. The number of results is limited by the number of supported Security Hub standards that you've enabled in the calling account.
    ///   - securityControlId:  The identifier of the control (identified with SecurityControlId, SecurityControlArn, or a mix of both parameters) that you  want to determine the enablement status of in each enabled standard.
    ///   - logger: Logger used for logging
    @inlinable
    public func listStandardsControlAssociationsPaginator(
        maxResults: Int? = nil,
        securityControlId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListStandardsControlAssociationsRequest, ListStandardsControlAssociationsResponse> {
        let input = ListStandardsControlAssociationsRequest(
            maxResults: maxResults, 
            securityControlId: securityControlId
        )
        return self.listStandardsControlAssociationsPaginator(input, logger: logger)
    }
}

extension SecurityHub.DescribeActionTargetsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.DescribeActionTargetsRequest {
        return .init(
            actionTargetArns: self.actionTargetArns,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SecurityHub.DescribeProductsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.DescribeProductsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            productArn: self.productArn
        )
    }
}

extension SecurityHub.DescribeProductsV2Request: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.DescribeProductsV2Request {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SecurityHub.DescribeStandardsControlsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.DescribeStandardsControlsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            standardsSubscriptionArn: self.standardsSubscriptionArn
        )
    }
}

extension SecurityHub.DescribeStandardsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.DescribeStandardsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SecurityHub.GetEnabledStandardsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.GetEnabledStandardsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            standardsSubscriptionArns: self.standardsSubscriptionArns
        )
    }
}

extension SecurityHub.GetFindingHistoryRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.GetFindingHistoryRequest {
        return .init(
            endTime: self.endTime,
            findingIdentifier: self.findingIdentifier,
            maxResults: self.maxResults,
            nextToken: token,
            startTime: self.startTime
        )
    }
}

extension SecurityHub.GetFindingsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.GetFindingsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            sortCriteria: self.sortCriteria
        )
    }
}

extension SecurityHub.GetFindingsV2Request: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.GetFindingsV2Request {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            sortCriteria: self.sortCriteria
        )
    }
}

extension SecurityHub.GetInsightsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.GetInsightsRequest {
        return .init(
            insightArns: self.insightArns,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SecurityHub.GetResourcesV2Request: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.GetResourcesV2Request {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            sortCriteria: self.sortCriteria
        )
    }
}

extension SecurityHub.ListAggregatorsV2Request: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.ListAggregatorsV2Request {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SecurityHub.ListConfigurationPoliciesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.ListConfigurationPoliciesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SecurityHub.ListConfigurationPolicyAssociationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.ListConfigurationPolicyAssociationsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SecurityHub.ListEnabledProductsForImportRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.ListEnabledProductsForImportRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SecurityHub.ListFindingAggregatorsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.ListFindingAggregatorsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SecurityHub.ListInvitationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.ListInvitationsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SecurityHub.ListMembersRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.ListMembersRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            onlyAssociated: self.onlyAssociated
        )
    }
}

extension SecurityHub.ListOrganizationAdminAccountsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.ListOrganizationAdminAccountsRequest {
        return .init(
            feature: self.feature,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SecurityHub.ListSecurityControlDefinitionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.ListSecurityControlDefinitionsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            standardsArn: self.standardsArn
        )
    }
}

extension SecurityHub.ListStandardsControlAssociationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SecurityHub.ListStandardsControlAssociationsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            securityControlId: self.securityControlId
        )
    }
}
